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>&lt;b&gt;Hello World&lt;/b&gt;</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>&lt;b&gt;Hello World&lt;/b&gt;</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>&lt;b&gt;Hello World&lt;/b&gt;</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; }
    }
}