C # кодирование, которое позволяет любое шестнадцатеричное значение - PullRequest
0 голосов
/ 20 марта 2012

Я использую следующий код для десериализации XML string до object типа T:

public static T DeserializeXMLToObject<T>(string xmlText)
{
    if (string.IsNullOrEmpty(xmlText)) return default(T);
    XmlSerializer xs = new XmlSerializer(typeof(T));
    using (MemoryStream memoryStream = new MemoryStream(new UnicodeEncoding().GetBytes(xmlText)))
    using (XmlTextReader xsText = new XmlTextReader(memoryStream))
    {
        xsText.Normalization = true;
        return (T)xs.Deserialize(xsText);
    }
}

Но он выдает исключение, когда принимает недопустимое шестнадцатеричное значение:

XMLException : в документе XML есть ошибка (217388, 15). «[]», шестнадцатеричное значение 0x1A, является недопустимым символом. Линия 217388, позиция 15.

в System.Xml.Serialization.XmlSerializer.Deserialize (XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)

в System.Xml.Serialization.XmlSerializer.Deserialize (XmlReader xmlReader)

В какой кодировке я должен изменить строку new UnicodeEncoding().GetBytes(xmlText)) на такую, которая будет принимать любое шестнадцатеричное значение?

Мой код на C #, framework 4, сборка в VS2010 Pro.

1 Ответ

1 голос
/ 20 марта 2012

Нет такой кодировки.Эти символы просто недопустимы в XML.

Если вы хотите сериализовать двоичные данные, вам следует преобразовать их в base64 или hex или что-то еще.

...