XML (де) сериализация недопустимая строка несовместима в C #?

В 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);

«Items» - это просто небольшой класс, автоматически сгенерированный xsd / c Items.xsd. Items.xsd - это не более чем корневой элемент (Items), содержащий один дочерний элемент (Item):

<?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>&#xB; hello world</Item>

Я знаю \ v -> & # xB; является недопустимым символом, но почему XMLSerialize позволяет сериализовать его (без ошибок)? Я нахожу несовместимым с .NET то, что он позволяет мне сериализовать что-то без проблем, только чтобы обнаружить, что я не могу десериализовать это.

Есть ли решение, чтобы либо XMLSerializer автоматически удалял недопустимые символы перед сериализацией, либо я могу дать команду десериализации игнорировать недопустимые символы?

В настоящее время я решаю эту проблему, читая содержимое файла в виде строки, заменяя «вручную» недопустимые символы и затем десериализуя его ... но я считаю, что это отвратительный взлом.

Ответы на вопрос(1)

Ваш ответ на вопрос