我正在尝试将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);
}