Nieprawidłowy ciąg XML (de) serializacji niespójny w c #?

W języku C # (.net 4.0 i 4.5 / vs2010 i vs12), gdy serializuję obiekt zawierający ciąg znaków o niedozwolonym znaku za pomocą XMLSerializer, nie jest zgłaszany błąd. Jednakże, gdy deserializuję ten wynik, generowany jest błąd „nieprawidłowy znak”.

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

„Przedmioty” to tylko mała klasa automatycznie generowana przez xsd / c Items.xsd. Items.xsd to nic innego jak element główny (przedmioty) zawierający jedno dziecko (przedmiot):

<?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>

Błąd zgłoszony podczas deserializacji to

Nieobsługiwany wyjątek: System.InvalidOperationException: Wystąpił błąd w dokumencie XML (3, 12). ---> System.Xml.XmlException: „♂”, wartość szesnastkowa 0x0B, jest niepoprawnym znakiem. Wiersz 3, pozycja 12.

Seryjny plik XML zawiera wiersz 3:

<Item>&#xB; hello world</Item>

Wiem v -> & # xB; jest niedozwolonym znakiem, ale dlaczego XMLSerialize pozwala na szeregowanie (bez błędów)? Uważam za niespójne z .NET, że pozwala mi na serializację czegoś bez problemu, tylko po to, by dowiedzieć się, że nie mogę go deserializować.

Czy istnieje rozwiązanie, aby albo XMLSerializer automatycznie usuwał niedozwolone znaki przed serializacją, czy też mogę poinstruować deserializację, aby zignorowała niedozwolone znaki?

Obecnie rozwiązuję go, odczytując zawartość pliku jako ciąg znaków, zastępując „ręcznie” niedozwolone znaki, a następnie deserializując go ... ale uważam, że to brzydki hack / praca.

questionAnswers(1)

yourAnswerToTheQuestion