在我的程序中,我希望保存用户可能拥有的对象列表。每个对象都有一个特定的值,非常类似于ID或引用。我认为将对象的数值转换为要保存到磁盘的ASCII字符是个好主意。
下面是我的对象数组:
public short[,] Data = new short[5,5];我用随机数填充它(在42到100之间,表示用户可能拥有的对象I),然后将数据转换为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 = Row,Y= Col)
它后来指出,例外情况是:
‘V’,十六进制值W,是无效字符。行X,位置Y.。
V= ASCII控制字符
W=此控制字符的十六进制值。
X=行号
Y=位置值
控制字符不可序列化吗?如果是的话,有没有办法解决这个问题?
关于第二个注意事项:这个方法,没有控制字符,只会给出<60个可能的对象ID/引用号。我想也许使用Unicode会更好,因为它可以支持更多的字符,给我一个更大的范围。在我当前的代码中,有没有一种在ASCII上使用Unicode的方法?如果这是一个非常基本的问题,我提前道歉,因为我对Stack相当陌生.
发布于 2013-05-02 17:59:53
您是否尝试过直接序列化数组?
我不认为您有什么理由尝试为它做XML序列化程序的工作。最糟糕的是,你必须把你的5x5数组夷为平地,变成一个25元素的一维数组。
https://stackoverflow.com/questions/16327274
复制相似问题