我正在使用.NET XmlSerializer将xml序列化为对象,反之亦然。 xml包含编码的特殊字符,例如大于和/或小于符号。当xml被序列化为对象时,我需要将那些大于/小于符号的符号实际转换为"<"或">"当从对象转到xml时,我需要实际的"<"或">"转换成他们的编码版本。
我在UI中有几个工作/黑客进行转换,但我正在寻找一种更好的方法来处理这个问题。我希望实际的序列化程序中有一些参数设置可以在我序列化/去序列化时执行此操作。我环顾四周,玩过各种传递给序列化器的编剧/蒸汽,却找不到任何东西。
任何人都知道什么是最佳解决方案?
答案 0 :(得分:0)
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>