以下代码;
var c = (char) 1;
var serializer = new XmlSerializer(typeof (string));
var writer = new StringWriter();
serializer.Serialize(writer, c.ToString());
var serialized = writer.ToString();
var dc = serializer.Deserialize(new StringReader(serialized));
在.NET 4中抛出此异常。
无效的操作异常 - XML文档中存在错误(2,12)。 '',十六进制值0x01,是无效字符。第2行,第12位
我做错了吗?或者有合理的解决方法吗?
非常感谢!
答案 0 :(得分:12)
explained here有一种解决方法 - 您可以使用XmlReaderSettings.CheckCharacters
选项忽略字符验证:
XmlReader xr = XmlReader.Create(new StringReader(serialized),
new XmlReaderSettings { CheckCharacters = false });
var dc = (string)serializer.Deserialize(xr);
答案 1 :(得分:7)
您正在尝试序列化无法在XML中表示的字符。不幸的是他们打破了XML序列化。除了编写自己的转义代码之外,我不知道有任何其他的解决方法。
另一方面,这些字符的实际用途(空格前的ASCII字符,除标签,回车和换行IIRC之外)相对较少 - 你可能会发现你可以剥离它们。替代方法是提出自己的转义,或者将整个字符串编码为二进制和base64结果。与重新编码方法相比,转义将占用更少的空间:)