简体   繁体   English

使用Newtonsoft处理将Xml转换为Json的CData

[英]Handling CData in converting Xml to Json using Newtonsoft

I'm trying to convert an Xml to Json and run some business logic and then Deserialize into ac# object using Newtonsoft Json.Net . 我正在尝试将Xml转换为Json并运行一些业务逻辑,然后使用Newtonsoft Json.Net将其反序列化为ac#对象。 The Xml has CData values. Xml具有CData值。 How can I deserialize the Json such that I get the value inside CData mapped to ac# field. 我如何反序列化Json,以便获得映射到ac#字段的CData中的值。

EDIT: The xml may/maynot contain CData 编辑:xml可能/可能不包含CData

Eg Xml: 例如Xml:

With CData 使用CData

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

With plain text 带纯文本

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

Json: 杰森:

With CData: 使用CData:

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

With plain text: 使用纯文本:

{"text":"Sample Text"}

Code: 码:

class Data
{
        [JsonProperty("text")]
        public string Text { get; set; }
}

public static Data ConvertJsonToObject(string json)
{
    return JsonConvert.DeserializeObject<Data>(json);
}

Thank you advance. 谢谢你提前。

xsd for your xml sample. XML样本的xsd。 I defined CDATA as a simple type extending string and a complex type for the text node containing the CDATA. 我将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>

Generated cs file from xsd: 从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 classes: 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; }
  }
} 

deserialize from xml and convert to json (you could add implicit conversion): 从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);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM