【问题标题】:Xml serialization/deserealization and html character encodingXml 序列化/去实化和 html 字符编码
【发布时间】:2016-04-03 18:32:00
【问题描述】:

我正在使用 .NET XmlSerializer 将 xml 序列化为对象,反之亦然。 xml 包含编码的特殊字符,例如大于和/或小于符号。当 xml 被序列化为对象时,我需要将那些大于/小于符号实际转换为“”,当从对象转到 xml 时,我需要实际的“”转换成他们的编码版本。

我在 UI 中有一些解决方法/技巧来进行转换,但我正在寻找一种更好的方法来处理这个问题。我希望在实际的序列化程序中会有一些参数设置,当我序列化/反序列化时会这样做。我环顾四周并与传递给序列化程序的各种作家/蒸汽一起玩,但找不到任何东西。

有谁知道这个问题的最佳解决方案是什么?

【问题讨论】:

    标签: .net serialization xmlserializer


    【解决方案1】:

    XmlSerializer 默认情况下应该这样做。如果不是,您可以发布一些详细信息吗?

    当您将对象序列化为 XML 时,<> 之类的字符串值会自动转义 - 转换为 <>,因为这些字符用于标签中,因此它们不能出现在元素中。

    当您将 XML 反序列化回一个对象时,它会做相反的事情,即放回 <>。看看这个控制台应用程序和输出:

    class Program
    {
        static void Main(string[] args)
        {
            var myClass = new MyClass {Value = "<div>I am HTML!</div>"};
            var serializer = new XmlSerializer(typeof (MyClass));
            var xmlString = new StringBuilder();
            using (var writer = new StringWriter(xmlString))
            {
                serializer.Serialize(writer, myClass);
            }
            Console.WriteLine("Serialized:");
            Console.WriteLine(xmlString.ToString());
            Console.WriteLine();
            using (var reader = new StringReader(xmlString.ToString()))
            {
                var deserializedClass = serializer.Deserialize(reader) as MyClass;
                Console.WriteLine("Deserialized myClass.Value: " + deserializedClass.Value);
            }
            Console.ReadLine();
        }
    }
    

    Serialized: &lt;?xml version="1.0" encoding="utf-16"?&gt; <MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Value>&lt;div&gt;I am HTML!&lt;/div&gt;</Value>

    Deserialized myClass.Value: &lt;div&gt;I am HTML!&lt;/div&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-09
      • 2010-12-03
      相关资源
      最近更新 更多