在C#(.NET 4.0和4.5 / VS2010和VS12)当我序列含有具有使用XMLSerializer的非法字符的字符串对象,不会引发错误。 然而,当我反序列化的结果,“无效字符”错误被抛出。
// add to XML
Items items = new Items();
items.Item = "\v hello world"; // contains "illegal" character \v
// variables
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Items));
string tmpFile = Path.GetTempFileName();
// serialize
using (FileStream tmpFileStream = new FileStream(tmpFile, FileMode.Open, FileAccess.ReadWrite))
{
serializer.Serialize(tmpFileStream, items);
}
Console.WriteLine("Success! XML serialized in file " + tmpFile);
// deserialize
Items result = null;
using (FileStream plainTextFile = new FileStream(tmpFile, FileMode.Open, FileAccess.Read))
{
result = (Items)serializer.Deserialize(plainTextFile); //FAILS here
}
Console.WriteLine(result.Item);
“项目”是只是XSD / C Items.xsd自动生成一个小班。 Items.xsd无非是根元素更包含一个孩子(项目)(项目):
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="Items">
<xs:complexType>
<xs:sequence>
<xs:element name="Item" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
反序列化过程中引发的错误是
未处理的异常:System.InvalidOperationException:有是XML文档(3,12)中的错误。 ---> System.Xml.XmlException: '♂',十六进制值0x0B中,是无效的字符。 第3行,第12位。
序列化的XML文件包含3这一行:
<Item> hello world</Item>
我知道\ V> - &#的xB; 是非法字符,但为什么XMLSerialize来允许它被序列化(无误差)? 我觉得很不一致.NET,它让我的东西序列化没有问题才发现,我不能反序列化的。
是否有解决方案因此无论是XMLSerializer的序列化之前将自动删除非法字符或者我可以指示反序列化到忽略非法字符?
目前我通过读取文件内容作为字符串解决它,“手动”代替非法字符和未来反序列化......但我发现周围的一个丑陋的黑客/工作。