Cadeia inválida de serialização XML (de) inconsistente em c #?

Em c # (.net 4.0 e 4.5 / vs2010 e vs12) quando eu serializar um objeto que contém uma seqüência de caracteres com um caractere ilegal usando XMLSerializer, nenhum erro é lançado. No entanto, quando eu desserialize esse resultado, um erro "caractere inválido" é lançado.

        // 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" é apenas uma pequena classe autogerada por xsd / c Items.xsd. Items.xsd nada mais é do que um elemento raiz (Items) contendo um filho (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>

O erro lançado durante a desserialização é

Exceção não tratada: System.InvalidOperationException: há um erro no documento XML (3, 12). ---> System.Xml.XmlException: '♂', valor hexadecimal 0x0B, é um caractere inválido. Linha 3, posição 12.

O arquivo XML serializado contém na linha 3 isto:

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

Eu sei \ v -> & # xB; é um caractere ilegal, mas por que o XMLSerialize permite que ele seja serializado (sem erro)? Eu acho inconsistente o .NET que me permite serializar algo sem um problema apenas para descobrir que não posso desserializá-lo.

Existe uma solução para que o XMLSerializer remova os caracteres ilegais automaticamente antes de serializar ou posso instruir a desserialização para ignorar os caracteres ilegais?

Atualmente eu resolvo lendo o conteúdo do arquivo como uma string, substituindo "manualmente" os caracteres ilegais e depois desserializo ... mas acho que um hack / work feio por aí.

questionAnswers(1)

yourAnswerToTheQuestion