[英]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.