Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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中XML中JSON中的单元素嵌套数组#_C#_Arrays_Json_Xml_Json.net - Fatal编程技术网

C# C中XML中JSON中的单元素嵌套数组#

C# C中XML中JSON中的单元素嵌套数组#,c#,arrays,json,xml,json.net,C#,Arrays,Json,Xml,Json.net,我正在使用从XML序列化的JSON对象。XML的所有子节点都需要序列化为数组。我已经试了几天了,什么也没找到,但我已经接近了。问题是JsonConvert.SerializeObject()似乎将其视为一个单项数组,然后删除JSON中的[]数组指示符。这是我一直在做的事情的例子 预期结果如下: {"Foo":[{"Bar":[{"This":"stuff"}]}]} 到目前为止,最接近我的是这样的 XElement bar = new XElement("Bar");

我正在使用从XML序列化的JSON对象。XML的所有子节点都需要序列化为数组。我已经试了几天了,什么也没找到,但我已经接近了。问题是JsonConvert.SerializeObject()似乎将其视为一个单项数组,然后删除JSON中的[]数组指示符。这是我一直在做的事情的例子

预期结果如下:

{"Foo":[{"Bar":[{"This":"stuff"}]}]}
到目前为止,最接近我的是这样的

        XElement bar = new XElement("Bar");
        bar.SetAttributeValue("This", "stuff");
        XElement[] foo = { new XElement("Foo", bar) };
{"Foo":{"Bar":{"This":"stuff"}}}
 <Foo>
  <Bar This="stuff"/>
 </Foo>
但这仍然不完全正确。运行
JsonConvert.SerializeObject(foo)
后,我在这里得到的结果如下

        XElement bar = new XElement("Bar");
        bar.SetAttributeValue("This", "stuff");
        XElement[] foo = { new XElement("Foo", bar) };
{"Foo":{"Bar":{"This":"stuff"}}}
 <Foo>
  <Bar This="stuff"/>
 </Foo>
对于API,父级的每个子级都必须是数组类型,即使它只包含1个元素。此请求的XML版本(我无法使用)如下所示

        XElement bar = new XElement("Bar");
        bar.SetAttributeValue("This", "stuff");
        XElement[] foo = { new XElement("Foo", bar) };
{"Foo":{"Bar":{"This":"stuff"}}}
 <Foo>
  <Bar This="stuff"/>
 </Foo>

我有一种感觉,我忽略了一些简单的事情,或者让事情变得更复杂,但我真的需要一些帮助


谢谢

评论中的亨特·陈的重定向解决了我的问题。下面是工作代码最终的样子

        XNamespace ns = "http://james.newtonking.com/projects/json";

        XElement bar = new XElement("Bar");
        userdata.SetAttributeValue(ns + "Array", true);
        userdata.SetAttributeValue("This", "stuff");
        XElement foo = new XElement("Foo", bar);
        parts.SetAttributeValue(ns+"Array", true);

        XDocument xmlbody = new XDocument();

        xmlbody.Add(foo);

        string json = JsonConvert.SerializeObject(xmlbody);
由于每个节点只有一个元素,因此必须强制数组。这次回归正是我想要的

 {"Foo":[{"Bar":[{"@This":"stuff"}]}]}}

谢谢

看起来你正在使用Newtonsoft的库。与其自己构建JSON对象,不如构建嵌套的
dictional
s和
Dictionary
s数组,并让
jsonvert.Tostring
为您完成所有繁重的工作。如果可行,请告诉我,我会为您写一个答案;)我已经尝试过类似的方法,结果出现了一个转换错误,看起来是这样的<代码>字典dic=新字典();dic.添加(“本”、“材料”);字典dic2=新字典();dic2.添加(“条”,dic)参考这个:并使用JsonConvert.SerializeXNode(…)Re:your:your:your:your:your:your:your:your:your:your:your:your:your:your:your:your:your:your:your:your:your:your需要使用
Dictionary
s的数组来让它。单个
字典
始终转换为JSON对象,而不是JSON数组。