C# HTML的XML序列化
好了,这一个成功了!谢谢大家强>C# HTML的XML序列化,c#,html,xml-serialization,cdata,C#,Html,Xml Serialization,Cdata,好了,这一个成功了!谢谢大家 public class Result { public String htmlEscaped { set; get; } [XmlIgnore] public String htmlValue { set; get; } [XmlElement("htmlValue")] public XmlCDataSection htmlValueCData {
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
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();
Result res=新结果();
res.htmlValue=“你好,世界”;
XmlSerializer s=新的XmlSerializer(res.GetType());
TextWriter w=new StreamWriter(Environment.CurrentDirectory+“\\result.xml”,false,System.Text.Encoding.Default);
s、 序列化(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>
b埃洛世界/b
我需要改变什么才能得到这个:
<?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>
helloworld]]>
但不是
<htmlValue><b>Hello World</b></htmlValue>
b健康世界/b
我对JSON序列化程序也这样做,在硬盘上的文件中,HTML保存正确。
为什么以及在哪里使用HTTP实用程序来防止这种情况?以及如何绕过它
你能给出一个代码示例吗?
除了C#自己的序列化程序之外,还有其他序列化程序吗
我从Marco AndréSilva那里找到了这个链接,我确实需要这样做,但它不同,如何在不改变类型的情况下包含它?请参阅“”,了解相同的问题和解决方案
顺便说一句,在我看来,如果供应商不再存在,是时候使用不同的产品了。可能是一个理解XML规范的人,它只存在了十多年。我的理解是,您需要XML将其提供给某些实用程序。您是否还计划使用它来反序列化对象
如果不是,那么为什么不自己做呢?序列化你的对象?往返对象->XML->对象有点棘手,但第一部分并非如此。这里有一个简单的技巧来实现您想要的。您只需要序列化XmlCDataSection属性而不是string属性: (这几乎和约翰的建议一样,只是简单一点……)
你为什么在乎?这两者在语义上是相同的。因为使用它的工具不喜欢它。首先,它显示HTML文本。在2号,它显示“Hello World”粗体。我无法更改消费工具。那么,该工具还有其他问题,因为您没有
Hello World
,因此不应使用粗体。John“如果该工具接受CDATA版本,但不接受转义版本,则该工具存在需要修复的致命错误。这两个XML在语义上完全相同。也许该工具不理解XML?除此之外,我不明白你的问题。此外,C#是一种编程语言。它根本没有任何序列化程序。您似乎指的是.NET序列化程序,而您恰好是从C#编程语言使用它们。“是的,但是为什么XML标准上还有CDATA标记呢?如果有其他方法可以从类在C#中创建XML文件。。对任何解决方案都开放。ups…应该是有问题的,已修复。在创建示例时,问题仍然是一样的。消费工具不能被改变,它是生产性的,公司制造的,它已经消失了!反射类型出错。[XmlElement(“node”,typeof(XmlCDataSection))]公共字符串htmlValue{get;set;}返回需要是字符串,因为JSON序列化程序。我认为您需要发布一些代码。首先讨论XML序列化,现在讨论JSON序列化。我不明白你想解决什么问题。我已经在使用JsonExSerializer了,它做得很好。我还需要XML。Object>Xml我不明白你想做什么?这就是为什么我希望您发布一些代码来显示您正在尝试的操作。我的“建议”来自一个案例,其中OP需要CDATA作为文本值。结果为空,只有XML头。htmlValue上的[XmlIgnore]可能会影响[XmlElement(“htmlValue”)]。你试过了吗?
public class Result
{
[XmlIgnore]
public String htmlValue
{
get;
set;
}
private static XmlDocument _dummyDoc;
[XmlElement("htmlValue")]
public XmlCDataSection htmlValueCData
{
get { return _dummyDoc.CreateCDataSection(htmlValue); }
set { htmlValue = (value != null) ? value.Data : null; }
}
}