Cit*_*iew 13 .net c# serialization xml-serialization .net-4.0
以下代码;
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));
Run Code Online (Sandbox Code Playgroud)
在.NET 4中引发此异常.
无效的操作异常 - XML文档中存在错误(2,12).'',十六进制值0x01,是无效字符.第2行,第12位
难道我做错了什么?或者有合理的解决方法吗?
非常感谢!
mel*_*okb 12
这里解释了一种解决方法- 您可以使用XmlReaderSettings.CheckCharacters
选项忽略字符验证:
XmlReader xr = XmlReader.Create(new StringReader(serialized),
new XmlReaderSettings { CheckCharacters = false });
var dc = (string)serializer.Deserialize(xr);
Run Code Online (Sandbox Code Playgroud)
您正在尝试序列化无法在XML中表示的字符.不幸的是他们打破了XML序列化.除了编写自己的转义代码之外,我不知道除此之外的任何变通方法.
另一方面,这些字符的实际用途(空格前的ASCII字符,除标签,回车和换行IIRC之外)相对较少 - 你可能会发现你可以剥离它们.替代方法是提出自己的转义,或者将整个字符串编码为二进制和base64结果.转义将比重新编码方法占用更少的空间:)