将XML数据转换为JSON

Anb*_*asi -1 c# xml json windows-phone-8.1

我需要在下面的C#代码中将以下XML解析为json。

<rss version="2.0">
<channel>
<title>TITLE </title>
<link>http://sample.com/</link>
<language>en-Us</language>
<pubDate>System.String[] GMT</pubDate>
<item>
<ParentSection>News</ParentSection>
<ParentSectionTamilname>?????????</ParentSectionTamilname>
<ParentSectionID>1</ParentSectionID>
<Count>6</Count>
<items>
<Section>National</Section>
<Sectiontamil>????????????????</Sectiontamil>
<Sectionid>3</Sectionid>
<SectionURL>
http://sample.com/rss/RssfeedXML.aspx?Id=3&Main=1
</SectionURL>
<SectionJsonURL>
http://sample.com/json/JsonfeedXML.aspx?Id=3&Main=1
</SectionJsonURL>
<subitem>
<Sub_Count>0</Sub_Count>
</subitem>
</items>
<items>
<Section>National</Section>
<Sectiontamil>????????????????</Sectiontamil>
<Sectionid>3</Sectionid>
<SectionURL>
http://sample.com/rss/RssfeedXML.aspx?Id=3&Main=1
</SectionURL>
<SectionJsonURL>
http://sample.com/json/JsonfeedXML.aspx?Id=3&Main=1
</SectionJsonURL>
<subitem>
<Sub_Count>0</Sub_Count>
</subitem>
</items>
</item>

<item>
<ParentSection>News</ParentSection>
<ParentSectionTamilname>?????????</ParentSectionTamilname>
<ParentSectionID>1</ParentSectionID>
<Count>6</Count>
<items>
<Section>National</Section>
<Sectiontamil>????????????????</Sectiontamil>
<Sectionid>3</Sectionid>
<SectionURL>
http://sample.com/rss/RssfeedXML.aspx?Id=3&Main=1
</SectionURL>
<SectionJsonURL>
http://sample.com/json/JsonfeedXML.aspx?Id=3&Main=1
</SectionJsonURL>
<subitem>
<Sub_Count>0</Sub_Count>
</subitem>
</items>
<items>
<Section>National</Section>
<Sectiontamil>????????????????</Sectiontamil>
<Sectionid>3</Sectionid>
<SectionURL>
http://sample.com/rss/RssfeedXML.aspx?Id=3&Main=1
</SectionURL>
<SectionJsonURL>
http://sample.com/json/JsonfeedXML.aspx?Id=3&Main=1
</SectionJsonURL>
<subitem>
<Sub_Count>0</Sub_Count>
</subitem>
</items>
</item>
</channel>
</rss>
Run Code Online (Sandbox Code Playgroud)

以下是我用来将XML转换为JSON的C#代码,但失败。我无法使用SerializeObject进行序列化。

var xml = new XmlDocument();
                xml.LoadXml(ABOVE XMLSTRING);
                string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(xml, Newtonsoft.Json.Formatting.None);
Run Code Online (Sandbox Code Playgroud)

在这方面的任何帮助将不胜感激。

谢谢。

har*_*r07 5

JsonConvert.SerializeXmlNode()相反,您应该使用XML序列化为JSON:

var xml = new XmlDocument();
xml.LoadXml("your XML here");
string jsonString = Newtonsoft.Json.JsonConvert.SerializeXmlNode(xml);
Run Code Online (Sandbox Code Playgroud)


Dil*_*mar 5

您需要按照xml标准格式化xml字符串。

&amp; // Use instead of &
Run Code Online (Sandbox Code Playgroud)

格式化的xml字符串如下

<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
  <channel>
    <title>TITLE </title>
    <link>http://sample.com/</link>
    <language>en-Us</language>
    <pubDate>System.String[] GMT</pubDate>
    <item>
        <ParentSection>News</ParentSection>
        <ParentSectionTamilname>?????????</ParentSectionTamilname>
        <ParentSectionID>1</ParentSectionID>
        <Count>6</Count>
        <items>
            <Section>National</Section>
            <Sectiontamil>????????????????</Sectiontamil>
            <Sectionid>3</Sectionid>
            <SectionURL>
                http://sample.com/rss/RssfeedXML.aspx?Id=3&amp;Main=1
            </SectionURL>
            <SectionJsonURL>
                http://sample.com/json/JsonfeedXML.aspx?Id=3&amp;Main=1
            </SectionJsonURL>
            <subitem>
                <Sub_Count>0</Sub_Count>
            </subitem>
        </items>
        <items>
            <Section>National</Section>
            <Sectiontamil>????????????????</Sectiontamil>
            <Sectionid>3</Sectionid>
            <SectionURL>
                http://sample.com/rss/RssfeedXML.aspx?Id=3&amp;Main=1
            </SectionURL>
            <SectionJsonURL>
                http://sample.com/json/JsonfeedXML.aspx?Id=3&amp;Main=1
            </SectionJsonURL>
            <subitem>
                <Sub_Count>0</Sub_Count>
            </subitem>
        </items>
    </item>

    <item>
        <ParentSection>News</ParentSection>
        <ParentSectionTamilname>?????????</ParentSectionTamilname>
        <ParentSectionID>1</ParentSectionID>
        <Count>6</Count>
        <items>
            <Section>National</Section>
            <Sectiontamil>????????????????</Sectiontamil>
            <Sectionid>3</Sectionid>
            <SectionURL>
                http://sample.com/rss/RssfeedXML.aspx?Id=3&amp;Main=1
            </SectionURL>
            <SectionJsonURL>
                http://sample.com/json/JsonfeedXML.aspx?Id=3&amp;Main=1
            </SectionJsonURL>
            <subitem>
                <Sub_Count>0</Sub_Count>
            </subitem>
        </items>
        <items>
            <Section>National</Section>
            <Sectiontamil>????????????????</Sectiontamil>
            <Sectionid>3</Sectionid>
            <SectionURL>
                http://sample.com/rss/RssfeedXML.aspx?Id=3&amp;Main=1
            </SectionURL>
            <SectionJsonURL>
                http://sample.com/json/JsonfeedXML.aspx?Id=3&amp;Main=1
            </SectionJsonURL>
            <subitem>
                <Sub_Count>0</Sub_Count>
            </subitem>
        </items>
    </item>
</channel>
Run Code Online (Sandbox Code Playgroud)

您需要调用SerializeXmlNode方法而不序列化对象。SerializeObject用于将xml转换为c#实例。

这是使用newtonsoft将xml序列化为json的代码

  XmlDocument xmlDoc = new XmlDocument();
  xmlDoc.Load("InputXml.xml"); // Can use xmlDoc.LoadXml(YourString);
  string jsonText = JsonConvert.SerializeXmlNode(xmlDoc);
Run Code Online (Sandbox Code Playgroud)

好的做法是将xml保存在文件中并从文件加载,而不是将硬代码作为字符串存储,这会使代码变得笨拙。