包含无效字符的对象的XML序列化

Inf*_*tus 5 .net serialization xml-serialization

我正在序列化一个包含String属性中的HTML数据的对象.

Dim Formatter As New Xml.Serialization.XmlSerializer(GetType(MyObject))
Dim fs As New FileStream(FilePath, FileMode.Create)
Formatter.Serialize(fs, Ob)
fs.Close()
Run Code Online (Sandbox Code Playgroud)

但是当我将XML读回Object时:

Dim Formatter As New Xml.Serialization.XmlSerializer(GetType(MyObject))
Dim fs As New FileStream(FilePath, FileMode.Open)
Dim Ob = CType(Formatter.Deserialize(fs), MyObject)
fs.Close()
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

"'', hexadecimal value 0x14, is an invalid character. Line 395, position 22."
Run Code Online (Sandbox Code Playgroud)

.NET不应该阻止这种错误,转义无效字符吗?

这里发生了什么,我该如何解决?

小智 6

我将XmlReaderSettings属性CheckCharacters设置为false.如果您通过XmlSerializer自行序列化数据,我只建议这样做.如果它来自一个未知的来源,那么这不是一个好主意.

public static T Deserialize<T>(string xml)
{
    var xmlReaderSettings = new XmlReaderSettings() { CheckCharacters = false };

    XmlReader xmlReader = XmlTextReader.Create(new StringReader(xml), xmlReaderSettings);
    XmlSerializer xs = new XmlSerializer(typeof(T));

    return (T)xs.Deserialize(xmlReader);
}
Run Code Online (Sandbox Code Playgroud)

  • CheckCharacters = false正是我需要知道的.谢谢! (2认同)

lav*_*nio 2

它确实应该在序列化步骤中失败,因为0x14是 XML 的无效值没有办法转义它,即使使用 也是如此&#x14,因为它被作为有效字符排除在 XML 模型之外。实际上,我很惊讶序列化器允许这样做,因为它使序列化器成为不合格的序列化器。

在序列化字符串之前,您是否可以从字符串中删除无效字符?你有 HTML 的目的是什么0x14

或者,您是否有可能使用一种编码进行写入,并使用另一种编码进行读取?

  • 是的,就我而言,无效字符很重要。那个怎么样? (2认同)