私のプログラムでは、ユーザーが持つ可能性のあるオブジェクトのリストを保存したいと考えています。各オブジェクトには、ID や参照と同じように特定の値があります。オブジェクトの数値を ASCII 文字に変換してディスクに保存するのは良い考えだと思いました。
ここに私のオブジェクト配列があります:
public short[,] Data = new short[5,5];
乱数 (ユーザーが持つ可能性のあるオブジェクト ID を表す 42 から 100 の間) を入力し、ファイルにシリアル化する前にデータを ASCII 文字に変換します。
for (int i = 0; i <= 4; i++)
{
for (int ii = 0; ii <= 4; ii++)
{
Data[i, ii] = (short)Rand.Next(42, 100); //random numbers to get random characters
Save_Data.ASCII += (char)Data[i, ii]; //Converting to ASCII and adding to Class which will be saved to file
}
}
XmlSerializer Writer = new XmlSerializer(typeof(Save_Data));
using (FileStream file = File.OpenWrite(myfile))
{
Writer.Serialize(file, Save_Data);
}
ファイルを読み取るときにエラーは発生せず、データを値のリストに戻すことができます。元のデータは配列にありますが、リストを配列に戻すためのコードは含めていません
Save_Data fList;
XmlSerializer Reader = new XmlSerializer(typeof(Save_Data));
using (FileStream input = File.OpenRead(myfile))
{
fList = Reader.Deserialize(input) as Save_Data; //Reading in the data
}
string Final = "";
byte[] ASCII = Encoding.ASCII.GetBytes(fList.World);
foreach (Byte b in ASCII)
{
Final += " " + b.ToString();
}
Console.WriteLine(Final);
これはうまくいきます。ただし、ランダム関数の範囲を拡張すると、次のようになります。
Rand.Next(12,100);
制御文字などの他の ASCII 文字を含めるには、ファイルをプログラムに読み込むときにエラーが発生します。
XML 文書 (x, y) にエラーがあります。
(x = 行、Y = 列)
後で例外が次のように述べられています。
"' V '、16 進値Wは無効な文字です。行X、位置 Y。 "
V = ASCII 制御文字
W = この制御文字の 16 進値
X = 行番号
Y = 位置の値
制御文字はシリアル化できませんか? もしそうなら、これを回避する方法はありますか?
2 つ目の注意点: この方法では、制御文字を使用しない場合、可能なオブジェクト ID/参照番号が 60 未満しか得られません。より多くの文字をサポートできるので、Unicode を使用した方がよいのではないかと考えました。私の現在のコードでは、ASCII で Unicode を使用する方法はありますか? 私はスタックにかなり慣れていないため、これが非常に基本的な質問である場合は、事前にお詫び申し上げます...