【问题标题】:Single Element Nested Arrays in JSON from XML in C#JSON 中的单元素嵌套数组来自 C# 中的 XML
【发布时间】:2016-03-17 23:06:44
【问题描述】:

我正在使用从 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) };

但还是不太对劲。我运行JsonConvert.SerializeObject(foo) 后得到的结果是这样的......

{"Foo":{"Bar":{"This":"stuff"}}}

对于 API,父节点的每个子节点都必须是数组类型,即使它只包含 1 个元素。这个请求的 XML 版本,我用不了,长这样……

 <Foo>
  <Bar This="stuff"/>
 </Foo>

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

谢谢!

【问题讨论】:

  • 看起来您正在使用 Newtonsoft 的库。您可以构建嵌套的 Dictonarys 和 Dictionarys 的数组,而不是自己构建 JSON 对象,并让 JsonConvert.Tostring 为您完成所有繁重的工作。
  • 如果可行,请告诉我,我会为您写一个答案;)
  • 我已经尝试过类似的方法,结果出现了转换错误,看起来像这样。 Dictionary&lt;string,string&gt; dic = new Dictionary&lt;string,string&gt;(); dic.add("This","stuff"); Dictionary&lt;string,Dictionary&lt;string,string&gt;&gt; dic2 = new Dictionary&lt;string,Dictionary&lt;string,string&gt;&gt;(); dic2.add("Bar", dic);
  • 参考这个:convert-xml-to-json-array-when-only-one-object 并使用JsonConvert.SerializeXNode(...)
  • 回复:您对Dictionarys 的使用:您需要使用Dictionarys 的数组才能使其正常工作。单个 Dictionary 始终转换为 JSON 对象,从不转换为 JSON 数组。

标签: c# arrays json xml json.net


【解决方案1】:

cmets 中的 Hunts Chen 的重定向解决了我的问题。这是工作代码最终的样子。

        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"}]}]}}

谢谢!

【讨论】:

    猜你喜欢
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    相关资源
    最近更新 更多