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

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



    
        
            
                
            
        
    

Ошибка, возникающая при десериализации,

Необработанное исключение: System.InvalidOperationException: в документе XML есть ошибка (3, 12). ---> System.Xml.XmlException: '♂'шестнадцатеричное значение 0x0B является недопустимым символом. Строка 3, позиция 12.

Сериализованный XML-файл содержит в строке 3 это:

 hello world

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

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

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

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

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