Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C将XDocument或XmlDocument转换为JSON_C#_Xml_Json_Linq To Xml_Json.net - Fatal编程技术网

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

C# 使用C将XDocument或XmlDocument转换为JSON,c#,xml,json,linq-to-xml,json.net,C#,Xml,Json,Linq To Xml,Json.net,我有一个很棒的XML: <Products> <Product ProductCode="C1010" CategoryName="Coins" /> <Product ProductCode="C1012" CategoryName="Coins" /> <Product ProductCode="C1013" CategoryName="Coins" /> </Products> 我不希望json中有“Product”

我有一个很棒的XML:

<Products>
  <Product ProductCode="C1010" CategoryName="Coins" />
  <Product ProductCode="C1012" CategoryName="Coins" />
  <Product ProductCode="C1013" CategoryName="Coins" />
</Products>
我不希望json中有“Product”子级别,因为这三行都是产品。这是我的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"}]

不要使用xml writer或con-version,只需从原始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
使用方法调用

JsonConvert.SerializeXNode(x, Formatting.None, true);
这将省略根节点,并应创建您期望的内容。

尝试此操作

public string getData(ref XmlDocument doc) {

        JObject productobj = new JObject();

        var productsenum = from p in doc.GetElementsByTagName("product").Cast<XmlElement>()
                           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();
    }

嗯,我想要一个json文件,我不明白你打算如何将xml转换成json,你能详细说明一下吗?通过LinQ解析xml文件,并将其转换为一个集合,或者你可以直接以jason文件格式编写。最好的方法是通过隔离文件流在隔离存储中创建一个文件,并将该文件命名为filename.jason。。然后,您可以使用file write写入文件。但是不要忘记将其自定义为jason格式…基本上,您将是{Products:[{@ProductC]ode://colection 项目变量1.data1,@CategoryName://colection 项变量1.data2},{@ProductCode://colection 项目变量2.data1,@CategoryName://colection 项目变量11.data1},{@ProductCode://colection 项目变量13.data1,@CategoryName://colection 项目变量13.data3}]}在文件流写入端,您可能知道,JSON输出表示XML输入。要更改它,您正在破坏它。您是否尝试调用JsonConvert.SerializeXNodex,Formatting.None,true?这应该会忽略根节点。Lol,翻转布尔正是我所需要的!谢谢@Jehof
public string getData(ref XmlDocument doc) {

        JObject productobj = new JObject();

        var productsenum = from p in doc.GetElementsByTagName("product").Cast<XmlElement>()
                           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();
    }