允许任何十六进制值的C#编码

时间:2012-03-20 06:03:21

标签: c# .net-4.0 xml-serialization

我使用以下代码将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事件)中的

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

我应该以哪种编码方式将 new UnicodeEncoding().GetBytes(xmlText)) 更改为接受任何十六进制值?

我的代码在C#,框架4中,在VS2010 Pro中构建。

1 个答案:

答案 0 :(得分:1)

没有这样的编码。这些字符在XML中完全是非法的。

如果要序列化二进制数据,则应将其转换为base64或hex等。