尝试用C#将Json解析到具有内部数组的字典中

尝试用C#将Json解析到具有内部数组的字典中,c#,arrays,json,dictionary,collections,C#,Arrays,Json,Dictionary,Collections,我是C语言新手,请澄清如何解析这个JSON。我需要迭代内部数组来提取一些数据。 JSON: 例如,需要访问字典“{”p:“Get in”,“f:[],“t:“t”}” 请执行以下操作: Dictionary<string, object> result = JsonConvert.DeserializeObject<Dictionary<string, object>>(bodyString); List<Dictionary<string, ob

我是C语言新手,请澄清如何解析这个JSON。我需要迭代内部数组来提取一些数据。 JSON:

例如,需要访问字典“{”p:“Get in”,“f:[],“t:“t”}” 请执行以下操作:

Dictionary<string, object> result = JsonConvert.DeserializeObject<Dictionary<string, object>>(bodyString);
List<Dictionary<string, object>> itemsArray = result["p"] as List<Dictionary<string, object>>;

foreach(var itemInfo in itemsArray)
{

}
Dictionary result=JsonConvert.DeserializeObject(bodyString);
列表项ray=结果[“p”]作为列表;
foreach(itemsArray中的var itemInfo)
{
}

但是itemsArray是空的。

如果您创建了一个适合数据的模型,那么您就不必担心字典反序列化的多个级别的问题

void Main()
{
    var json = @"{
   ""p"":[
      {
         ""p"":[
            {
               ""p"":""Get in "",
               ""f"":[

               ],
               ""t"":""t""
            },
            {
               ""p"":""test"",
               ""t"":""lb"",
               ""id"":""Make""
            }
         ]
      }
   ]
}";

    var data = JsonConvert.DeserializeObject<ItemCollection>(json);
}

public class ItemCollection
{
    public ItemGroup[] p { get; set; }
}

public class ItemGroup
{
    public Item[] p { get; set; }
}

public class Item
{
    public string p { get; set; }
    public string t { get; set; }
    public string id { get; set; }
    public string[] f { get; set; }
}
void Main()
{
var json=@”{
“p”:[
{
“p”:[
{
“p”:“进去”,
“f”:[
],
“t”:“t”
},
{
“p”:“test”,
“t”:“lb”,
“id”:“Make”
}
]
}
]
}";
var data=JsonConvert.DeserializeObject(json);
}
公共类项目集合
{
公共项目组[]p{get;set;}
}
公共类项目组
{
公共项[]p{get;set;}
}
公共类项目
{
公共字符串p{get;set;}
公共字符串t{get;set;}
公共字符串id{get;set;}
公共字符串[]f{get;set;}
}

如果反序列化为字符串到对象的字典,则对象将是JArray、Jobject或JToken。 { var result=JsonConvert.DeserializeObject>(json)

将输出“JArray”

您可以使用JArray等,或者指定所需的完整结构:

        {
            var result = JsonConvert.DeserializeObject<Dictionary<string, List<Dictionary<string,List<Dictionary<string,object>>>>>>(json);

            Console.Write((result["p"]).GetType().Name);
            var itemsArray = result["p"];
            var item = result["p"][0]["p"][0];

            foreach(var entry in item)
                Console.WriteLine(entry.Key + " = " + entry.Value);
        }
{
var result=JsonConvert.DeserializeObject(json);
Console.Write((结果[“p”]).GetType().Name);
var itemsArray=结果[“p”];
风险值项目=结果[“p”][0][“p”][0];
foreach(项目中的var条目)
Console.WriteLine(entry.Key+“=”+entry.Value);
}

关于你的“结果”字典,它是否已填充?是的,它已填充数据。首先,查看字典中存在哪些键。第二,尝试以下操作:结果[“p”]是列表;这将生成布尔值,告诉你这是否真的是列表使用调试器并观察结果的真实类型[“p”]
            Console.WriteLine((result["p"]).GetType().Name);
        }
        {
            var result = JsonConvert.DeserializeObject<Dictionary<string, List<Dictionary<string,List<Dictionary<string,object>>>>>>(json);

            Console.Write((result["p"]).GetType().Name);
            var itemsArray = result["p"];
            var item = result["p"][0]["p"][0];

            foreach(var entry in item)
                Console.WriteLine(entry.Key + " = " + entry.Value);
        }