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)
它确实应该在序列化步骤中失败,因为0x14是 XML 的无效值。没有办法转义它,即使使用 也是如此,因为它被作为有效字符排除在 XML 模型之外。实际上,我很惊讶序列化器允许这样做,因为它使序列化器成为不合格的序列化器。
在序列化字符串之前,您是否可以从字符串中删除无效字符?你有 HTML 的目的是什么0x14?
或者,您是否有可能使用一种编码进行写入,并使用另一种编码进行读取?