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

本文关键字:编码 许任何 十六进制 | 更新日期: 2023-09-27 18:28:24

我使用以下代码将XML string反序列化为T类型的object

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,在VS2010Pro中构建的。

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

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

如果您想序列化二进制数据,那么您应该将其转换为base64或十六进制或其他格式。