【发布时间】:2013-04-25 23:45:05
【问题描述】:
在我的程序中,我希望保存用户可能拥有的对象列表。每个对象都有一个特定的值,很像 ID 或引用。我认为将对象的数值转换为 ASCII 字符以保存到磁盘是一个好主意。
这是我的对象数组:
public short[,] Data = new short[5,5];
我用随机数(42 到 100 之间,代表用户可能拥有的对象 ID)填充它,然后将数据转换为 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',十六进制值W,为无效字符。行X,位置 Y.”
V = ASCII 控制字符
W = 此控制字符的十六进制值
X = 行号
Y = 位置值
控制字符是否不可序列化?如果是这样,有没有办法解决这个问题?
第二个注意事项:这种方法没有控制字符,只会给我
【问题讨论】:
-
michaelb958 的回答是正确的。我也非常强烈地鼓励您探索更多关于 XML 的基本原理,特别是如何很好地使用它。这不仅仅是文本转储:标签应该自我描述数据,因此人类有一些机会“读取” XML 文件的含义。以这种方式转储对象数组根本不是自我描述的。
标签: c# unicode xml-serialization ascii