使用newtonsoft将CDATA转换为JSON中的CDATA



我正在尝试将XML转换为JSON并运行一些业务逻辑,然后使用 Newtonsoft JSON.NET 进行对象进行序列化。XML具有CDATA值。我如何应对json进行估算,从而使cdata内的值映射到c#field。

编辑:XML May/Maynot包含CDATA

例如。 XML:

用cdata

<?xml version="1.0" encoding="UTF-8"?> <root> <text><![CDATA[Sample Text]]></text> </root>

纯文本

<?xml version="1.0" encoding="UTF-8"?> <root> <text>Sample Text></text> </root>

JSON:

与cdata:

{"text":{"#cdata-section":"Sample Text"}}

纯文本:

{"text":"Sample Text"}

代码:

class Data
{
        [JsonProperty("text")]
        public string Text { get; set; }
}
public static Data ConvertJsonToObject(string json)
{
    return JsonConvert.DeserializeObject<Data>(json);
}

谢谢您。

XSD,用于XML样本。我将CDATA定义为一种简单的类型,该类型扩展了字符串和包含CDATA的文本节点的复杂类型。

<xs:element name="root" type="CDATA_TEXT" /> 
<xs:simpleType name="CDATA">
  <xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:complexType name="CDATA_TEXT">
  <xs:sequence>
    <xs:element name="text" type="CDATA" />
  </xs:sequence>
</xs:complexType>

从XSD生成的CS文件:

namespace Q38072488.Xml
{
  using System;
  using System.Xml.Serialization;
  [Serializable()]
  [XmlRoot("root", Namespace = "", IsNullable = false)]
  public partial class CDATA_TEXT
  {
    [XmlElement("text")]
    public string Text { get; set; }
  }
}

JSON课程:

namespace Q38072488.Json
{
  using Newtonsoft.Json;
  public class CDataText
  {
      [JsonProperty("#cdata-section")]
      public string CDATA_Section { get; set; }
  }
  public class RootObject
  {
      [JsonProperty("text")]
      public CDataText Text { get; set; }
  }
} 

从XML进行挑选并转换为JSON(您可以添加隐式转换):

using (var fs = File.OpenRead("cdata.xml") ) {
  var srlz = new XmlSerializer(typeof(Xml.CDATA_TEXT));
  var xmlCdataText = (Xml.CDATA_TEXT)srlz.Deserialize(fs);
  var ro = new Json.RootObject() { 
    Text = new Json.CDataText() {
      CDATA_Section = xmlCdataText.Text } };
  string json = JsonConvert.SerializeObject(ro);
}

相关内容

  • 没有找到相关文章

最新更新