是否有" kill-strings"那些不是(de-)可序列化的?

时间:2014-09-26 13:10:19

标签: c# xml

我有一个2D数组(矩阵),我使用XmlSerializer编码为xml。当我对字符串进行反序列化时,我偶尔会遇到错误。
如下所示。它说XML-Document很糟糕,因为它包含十六进制值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)

<小时/> Possible solution

错误部分是:

<anyType xsi:type="xsd:string">&#x0;</anyType>

这是否意味着&#x0;不可序列化或者我正在尝试序列化的字符串不好? 我该怎么做才能避免出现这种异常?

<小时/> 我的代码:

// 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();

1 个答案:

答案 0 :(得分:3)

是的,XML文档中不允许有whole bunch of characters,而ASCII代码0就是其中之一。 (感谢knittl和pln提供spec中的位置。)

你的字符串是否包含十六进制值0x00?这似乎是一个字符串的奇怪值,因为它被用作终止字符。

我建议看一下,如果字符串确实需要包含这些字符,你可以选择在序列化过程中将数据转换为base64,并在反序列化过程中将其转换回来。