使用C#将XDocument或XmlDocument转换为JSON

我有这个XML很棒:

     

但它输出到这个JSON:

 {"Products":{"Product":[{"@ProductCode":"C1010","@CategoryName":"Coins"}, {"@ProductCode":"C1012","@CategoryName":"Coins"}, {"@ProductCode":"C1013","@CategoryName":"Coins"}]}} 

我想在我的json中没有’产品’分级,因为所有三行都是产品。 这是我的C#代码:

 //x is an XDocument. JsonConvert.SerializeXNode(x, Formatting.None, false) //JsonConvert.SerializeXNode(x); //I also tried without the formatting and the boolean. 

当我’将’XDocument’转换为XmlDocument并使用:

 var xmlDocument = new System.Xml.XmlDocument(); using (var xmlReader = x.CreateReader()) { xmlDocument.Load(xmlReader); } JsonConvert.SerializeXmNode(xmlDocument); 

它给了我完全相同的输出。 那么如何修改我的JSON解析,以便我有一个简单的产品列表。 我更喜欢最干净的解决方案。

或许更清楚一点,我这样的东西作为输出:

 [{"@ProductCode":"C1010","@CategoryName":"Coins"}, {"@ProductCode":"C1012","@CategoryName":"Coins"}, {"@ProductCode":"C1013","@CategoryName":"Coins"}] 

使用方法调用

 JsonConvert.SerializeXNode(x, Formatting.None, true); 

这将省略根节点,并应创建您期望的。

使用xml writer或con version的Instread只读取原始xml文件,在新文件中写入使用文件流编写器。

基本上你会是:

 List xml_retrevedData = new List(); FileStramWriter fr = new FileStramWriter(); fr.Write("{"Products":[{"@ProductCode":" //colection item variable1.data1","@CategoryName":"//colection item variable1.data2"}, {"@ProductCode":"//colection item variable2.data1","@CategoryName":"//colection item variable11.data1"}, {"@ProductCode":"//colection item variable13.data1","@CategoryName":"//colection item variable13.data3"}]}"); // in side the file stream Writer 

试试这个

 public string getData(ref XmlDocument doc) { JObject productobj = new JObject(); var productsenum = from p in doc.GetElementsByTagName("product").Cast() select p; JArray products = new JArray(); foreach (XmlElement p in productsenum) { JObject pobj = new JObject(); pobj["ProductCode"] = p.GetAttribute("ProductCode"); pobj["CategoryName"]= p.GetAttribute("CategoryName"); products.Add(pobj); } JObject product = new JObject(); product["Product"] = products; productobj["Products"] = product; return productobj.ToString(); }