【发布时间】:2010-12-03 03:39:13
【问题描述】:
好吧,这个成功了!谢谢大家!
public class Result
{
public String htmlEscaped
{
set;
get;
}
[XmlIgnore]
public String htmlValue
{ set; get; }
[XmlElement("htmlValue")]
public XmlCDataSection htmlValueCData
{
get
{
XmlDocument _dummyDoc = new XmlDocument();
return _dummyDoc.CreateCDataSection(htmlValue);
}
set { htmlValue = (value != null) ? value.Data : null; }
}
}
Result r = new Result();
r.htmlValue = ("<b>Hello</b>");
r.htmlEscaped = ("<b>Hello</b>");
XmlSerializer xml = new XmlSerializer(r.GetType());
TextWriter file = new StreamWriter(Environment.CurrentDirectory + "\\results\\result.xml", false, System.Text.Encoding.Default);
xml.Serialize(file, r);
file.Close();
结果:
<?xml version="1.0" encoding="Windows-1252"?>
<Result xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<htmlEscaped><b>Hello</b></htmlEscaped>
<htmlValue><![CDATA[<b>Hello</b>]]></htmlValue>
</Result>
如您所见,在 CDATA 为返回类型后,文件系统上的 XML 文件中不再有转义 html。 JSON 序列化不再起作用,但这可以通过一点类型扩展来解决。
问题是:
也许有人知道怎么做……
我有这个课程:
public class Result
{
public String htmlValue
{
get;
set;
}
}
我用它把它序列化为 XML
Result res = new Result();
res.htmlValue = "<p>Hello World</p>";
XmlSerializer s = new XmlSerializer(res.GetType());
TextWriter w = new StreamWriter(Environment.CurrentDirectory + "\\result.xml", false, System.Text.Encoding.Default);
s.Serialize(w, res);
w.Close();
工作正常,我明白了:
<?xml version="1.0" encoding="Windows-1252"?>
<Result xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<htmlValue><b>Hello World</b></htmlValue>
</Result>
为了得到这个,我可以做些什么改变:
<?xml version="1.0" encoding="Windows-1252"?>
<Result xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<htmlValue><![CDATA[<b>Hello World</b>]]></htmlValue>
</Result>
我已经搜索过,但找不到任何东西。 htmlValue 的类型 必须保留字符串,因为其他序列化 JSON 等。
棘手的一个...提前感谢您的建议
- HTML 在 C# 中的字符串中是正确的。为什么要解码或编码?
- XmlSerializer 将转义的 HTML 保存为 XML 文件。
- 不要使用 C# 进行消费。
是接受这个的外部工具:
<htmlValue><![CDATA[<b>Hello World</b>]]></htmlValue>
但不是
<htmlValue><b>Hello World</b></htmlValue>
我对 JSON Serializer 做同样的事情,在硬盘驱动器上的文件中,HTML 被正确保存。
为什么以及在哪里使用 HTTP 实用程序来防止这种情况?以及如何获取<![CDATA[ ]]>。
你能提供一个代码示例吗? 除了 C# 自己的序列化器之外,还有其他序列化器吗?
我从 Marco André Silva 那里找到了这个链接 .NET XML Serialization of CDATA ATTRIBUTE ,我需要这样做,但不同的是,如何在不更改类型的情况下包含它?
【问题讨论】:
-
你为什么在乎?两者在语义上是相同的。
-
当然是使用它的工具,不喜欢它。首先它显示 HTML 文本。在 2 日,它以粗体显示“Hello World”。我无法更改消费工具。
-
那么该工具还有其他问题,因为您没有
<b>Hello World</b>,所以它不应该是粗体。 -
John "如果该工具接受 CDATA 版本但不接受转义版本,则该工具存在需要修复的致命错误。两者是语义相同的 XML。可能该工具不理解 XML ?除此之外,我不明白你的问题。另外,C# 是一种编程语言。它根本没有任何序列化程序。你似乎指的是 .NET 序列化程序,而你恰好在 C# 编程中使用它们语言。”是的,但是为什么在 XML 标准上还有一个 CDATA 标记?如果有另一种方法可以在 C# 中从类中创建 XML 文件。打开任何解决方案。
-
ups...
应该是 ,有问题已修复。在创建示例时发生,问题仍然相同。消费工具无法改变它的生产力和公司让它消失了!
标签: c# html xml-serialization cdata