不可打印字符的序列化
本文关键字:序列化 字符 打印 | 更新日期: 2023-09-27 17:56:40
以下代码;
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
我做错了什么吗?还是有合理的解决方法?
非常感谢!
有一个解决方法,如此处所述 - 您可以使用XmlReaderSettings.CheckCharacters
选项忽略字符验证:
XmlReader xr = XmlReader.Create(new StringReader(serialized),
new XmlReaderSettings { CheckCharacters = false });
var dc = (string)serializer.Deserialize(xr);
您正在尝试序列化无法在 XML 中表示的字符。不幸的是,它们破坏了 XML 序列化。除了编写自己的转义代码之外,我不知道任何解决方法。
另一方面,此类字符(空格前的 ASCII 字符,制表符、回车符和换行 IIRC 除外)的实际用途相对较少 - 您可能会发现您可以去除它们。替代方案是提出自己的转义,或者将整个字符串编码为二进制和 base64 结果。转义将比重新编码方法占用更少的空间:)