2016-06-28 175 views
0

我試圖將Xml轉換爲Json並運行一些業務邏輯,然後使用反序列化成一個c#對象Newtonsoft Json.Net。 Xml具有CData值。我如何反序列化Json,以便將CData中的值映射到c#字段。使用Newtonsoft處理將XML轉換爲Json的CData

編輯:xml可能/不可含有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); 
} 

謝謝前進。

回答

0

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); 
} 
+0

謝謝Andrei的回覆。這裏的問題是該領域可能包含或不包含CData。在一個XML中,該字段可能有CData,在另一個XML中該字段可能有純文本,該解決方案應該適用於這兩種情況。 (我很抱歉,我錯過了在問題中提及這個信息) – Kaushik