2015-04-01 6 views
0

У меня есть xml;JSON.Net Преобразование XML в JSON

<?xml version="1.0" encoding="utf-8" ?> 
<XslMapper> 
    <type name="article" xsl="http://localhost:8080/Xsl-a.xslt"> 
    <category name="1234" xsl="http://localhost:8080/Xsl-b.xslt"></category> 
    <category name="1234" xsl="http://localhost:8080/Xsl-b.xslt"></category> 
    </type> 
    <type name="slideshow" xsl="http://localhost:8080/Xsl-c.xslt" > 
    <category name="1234" xsl="http://localhost:8080/Xsl-b.xslt"></category> 
    </type> 
</XslMapper> 

C# код для синтаксического анализа;

WebClient client = new WebClient(); 
      StringBuilder builder = new StringBuilder(); 
      string downloadString = client.DownloadString(XslMapperFileAddress); 
      XmlDocument xml = new XmlDocument(); 
      xml.LoadXml(downloadString); 
      XmlWriter writer = XmlWriter.Create(builder, new XmlWriterSettings() { OmitXmlDeclaration = true }); 
      xml.Save(writer); 
      string xmlString = builder.ToString(); 
      xml.LoadXml(xmlString); 
      string jsonText = JsonConvert.SerializeXmlNode(xml, Formatting.Indented, true); 
      jsonText = Regex.Replace(jsonText, "(?<=\")(@)(?!.*\":\\s)", string.Empty, RegexOptions.IgnoreCase); 
      XslMapper xslMapper = JsonConvert.DeserializeObject<XslMapper>(jsonText); 
      return xslMapper.XmlMapperTypes; 

Когда я сериализую этот xml в json с json.net, я получаю следующий результат;

{ 
    "type": [ 
    { 
     "name": "article", 
     "xsl": "http://localhost:8080/Services/Xsl-a.xslt", 
     "category": [ 
     { 
      "name": "1234", 
      "xsl": "http://localhost:8080/Services/Xsl-b.xslt" 
     }, 
     { 
      "name": "1234", 
      "xsl": "http://localhost:8080/Services/Xsl-b.xslt" 
     } 
     ] 
    }, 
    { 
     "name": "slideshow", 
     "xsl": "http://localhost:8080/Services/Xsl-c.xslt", 
     "category": { 
     "name": "1234", 
     "xsl": "http://localhost:8080/Services/Xsl-b.xslt" 
     } 
    } 
    ] 
} 

, как вы можете видеть, первый раздел категория анализируется как массив (который я намеревался сделать) и вторая часть превращается в объект. Вот почему я получаю ошибку от JSON.NET

Как я могу проанализировать вторую часть как массив;

"category": [ 
     { 
      "name": "1234", 
      "xsl": "http://localhost:8080/Services/Xsl-b.xslt" 
     }   
     ] 
    }, 
+0

Что такое класс XslMapper? Это тот, который вы создали или является частью сторонней библиотеки? – Ulric

ответ

1

Converting between JSON and XML содержит пример имени Атрибут ПРИНУДИТЕЛЬНО JSON массив, который говорит, что вы должны определить JSON Namespace

xmlns:json='http://james.newtonking.com/projects/json' 

в корневом элементе XML, и добавить атрибут

json:Array='true' 

Элемент, который вы хотите преобразовать в массив (<category/> в вашем случае).

Смежные вопросы