【问题标题】: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:
<?xml version="1.0" encoding="utf-16"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Value><div>I am HTML!</div></Value>
Deserialized myClass.Value: <div>I am HTML!</div>