【问题标题】:How to handle special characters like  when Serialize/Deserialize xml object?如何处理序列化/反序列化 xml 对象时的特殊字符?
【发布时间】:2013-06-28 04:49:14
【问题描述】:

我有一些 biz 对象来存储客户名称,有时名称包含一些特殊字符,例如 。这些名称是从第三方导入的,我无法从源中删除有趣的字符。

应用程序会通过 XmlSerializer 对客户对象进行序列化/反序列化,但这里奇怪的是,当我用特殊字符序列化名称时,没有错误,结果会像这样<Name>Jim <Name>。但是当我反序列化输出xml时,会得到一个异常There is an error in XML document (3, 15)

那么如何在我的应用程序中处理这些特殊字符呢?谢谢!

附上一些测试代码:

    public class Customer
    {
        public string Name;
    }

    class Program
    {
        public static T DeserializeFromXml<T>(string settings) where T : class
        {
            var serializer = new XmlSerializer(typeof(T));
            var reader = new StringReader(settings);
            var result = serializer.Deserialize(reader);
            return result as T;
        }

        public static string SerializeToXml<T>(T settings)
        {
            var serializer = new XmlSerializer(typeof(T));
            var writer = new StringWriter();
            serializer.Serialize(writer, settings);
            return writer.ToString();
        }

        static void Main(string[] args)
        {
            var str = new char[] { 'J', 'i', 'm', (char)2 };
            var customer = new Customer { Name = new string(str) };

            var output = SerializeToXml(customer);

            var obj = DeserializeFromXml<Customer>(output);
        }
    }

【问题讨论】:

  • 问题解决了!我将XmlReaderSettings.CheckCharacters = false 传递给XmlReader,然后它忽略了特殊字符。

标签: c# .net xml serialization


【解决方案1】:

我没有你的问题的解决方案,但这里是背景信息。

字符串 是用于表示值为“2”的字符的 XML。根据 XML 1.0,这不是一个有效字符。见http://www.w3.org/TR/2004/REC-xml-20040204/#NT-Char

.Net CLR 是一致的。 Xml 序列化程序将愉快地生成带有非法字符的 XML 文档。然而,当遇到非法字符时,反序列化器会抛出异常。

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/aa302290.aspx

XML 1.1 放宽了限制。但是.Net 只支持 XML 1.0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多