是否存在“;终止字符串”;不可(反)序列化的
本文关键字:不可 序列化 存在 终止 字符串 是否 | 更新日期: 2023-09-27 18:24:34
我有一个2D数组(矩阵),我使用XmlSerializer将其编码为xml。当我对字符串进行反序列化时,有时会出现错误
如下所示。它说XML文档不好,因为它包含十六进制值0x00
。
System.InvalidOperationException: Fehler im XML-Dokument (1,18449). ---
System.Xml.XmlException: '.', hexidezimaler Wert 0x00, ist ein ungültiges
Zeichen. Zeile 1, Position 18449.
bei System.Xml.XmlTextReaderImpl.Throw(Exception e)
bei System.Xml.XmlTextReaderImpl.Throw(String res, String[] args)
bei System.Xml.XmlTextReaderImpl.Throw(Int32 pos, String res, String[] args)
可能的解决方案
错误部分如下:
<anyType xsi:type="xsd:string">�</anyType>
这是否意味着�
不可序列化,或者我试图序列化的字符串是坏的?如何避免出现此异常?
我的代码:
// serialize
StringBuilder builder = new StringBuilder(512 * 1024);
StringWriter writer = new StringWriter(builder);
object[][] array = table.ToArray(true);
try
{
new XmlSerializer(typeof(object[][])).Serialize(writer, array);
return builder.Replace(Environment.NewLine, string.Empty).ToString();
}
catch (Exception exception) { return exception.Message; }
finally
{
writer.Close();
writer.Dispose();
}
// de-serialize
StringReader reader = new StringReader(xml);
object[][] array = (object[][])new XmlSerializer(typeof(object[][])).Deserialize(reader);
reader.Close();
reader.Dispose();
是的,XML文档中有一大堆不允许使用的字符,ASCII代码0就是其中之一。(感谢您在规格中提供位置)。
您的字符串包含十六进制值0x00是有原因的吗?对于字符串来说,这似乎是一个奇怪的值,因为它被用作终止字符。
我建议您查看一下,如果字符串确实需要包含这些字符,那么您可以选择在序列化期间将数据转换为base64,并在反序列化期间将其转换回base64。