C# 使用字符串数组中的嵌套对象动态创建 JSON

Posted

技术标签:

【中文标题】C# 使用字符串数组中的嵌套对象动态创建 JSON【英文标题】:C# Dynamically create JSON with nested objects from array of strings 【发布时间】:2021-05-03 14:23:24 【问题描述】:

所以我有一个动态的字符串数组,例如:

["a","b","c,"d"]

["x","y","z"]

数组是动态的,可以有可变数量的字符串。

我想创建一个嵌套的 json 对象,与项目的位置顺序相同。

最终结果是:


   "a":
      "b":
         "c":
            "d":
            
         
      
   


   "x":
      "y":
         "z":
         
      
   

【问题讨论】:

到目前为止你尝试过什么?另外,您期望什么返回类型?细绳?字典?还有什么? 【参考方案1】:

你可以写JObject得到你想要的:

var strs = new string[]  "a", "b", "c", "d" ;

JObject jo = new JObject();
JObject parent = jo;

for (int i = 0; i < strs.Length; i++)

    var jo2 = new JObject();
    parent[strs[i]] = jo2;
    parent = jo2;


// Your final json object is jo
Console.WriteLine(jo);

// string version
string json = jo.ToString(); // or jo.ToString(Formatting.None)

【讨论】:

非常感谢!奇迹般有效。你能解释一下“jo2”如何与“父母”有相同的引用(看起来像那样)吗? @user2653271 不,jo2 始终是对最里面的创建对象的引用。 jo 是最外部的父级,parent 是前一个父级。 抱歉我的无知......在行中:var jo2 = new JObject(); parent[strs[i]] = jo2; 我可以在调试中看到你解释的内容,但我还是不明白...... @user2653271 在循环中,您正在从外到内创建对象。 jo2 是您正在创建的当前对象,您正在将其添加到其父对象。根据这个定义,在每个循环中,jo2 是您创建的最里面的对象。 在第一次迭代中,parent[strs[i]] = jo2; 行之后,parent[strs[i]]jo2 的值都是:"Module": 我希望 jo2 保持新的 JObject...

以上是关于C# 使用字符串数组中的嵌套对象动态创建 JSON的主要内容,如果未能解决你的问题,请参考以下文章

Newtonsoft C#中的嵌套数组

Json.net实现方便的Json转C#(dynamic动态类型)对象

Json.net实现方便的Json转C#(dynamic动态类型)对象

Json.net实现方便的Json转C#(dynamic动态类型)对象

在 C# 中,如何为具有多个嵌套数组的 JSON 对象建模?

C# json反序列化 对象中嵌套数组 (转载)