Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.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# 如何使用从JSON字符串反序列化的嵌套元素数组_C#_Json - Fatal编程技术网

C# 如何使用从JSON字符串反序列化的嵌套元素数组

C# 如何使用从JSON字符串反序列化的嵌套元素数组,c#,json,C#,Json,以下JSON字符串将用于MVC操作: [{"id":13},{"id":14},{"id":15,"children":[{"id":16},{"id":17},{"id":18}]}] 我正在使用JavaScriptSerializer类的DeserializeObject方法对JSON字符串进行反序列化,但我不确定在反序列化后如何处理转换后的数组 var result = Request["nestable-output"]; JavaScr

以下JSON字符串将用于MVC操作:

[{"id":13},{"id":14},{"id":15,"children":[{"id":16},{"id":17},{"id":18}]}]
我正在使用
JavaScriptSerializer
类的
DeserializeObject
方法对JSON字符串进行反序列化,但我不确定在反序列化后如何处理转换后的数组

var result = Request["nestable-output"];                       

JavaScriptSerializer json_serializer = new JavaScriptSerializer();
var answer = json_serializer.DeserializeObject(result);

有没有其他方法可以做到这一点?

当您在
JavaScriptSerializer
类上调用
DeserializeObject()
时,除了可以从JSON结构推断出什么类型的对象外,序列化程序没有任何关于要反序列化成什么类型的提示。因此,当它看到一个JSON数组时,它将使用
object[]
,当它看到一个JSON对象时,它将使用
Dictionary
。知道了这一点,您可以通过在需要的地方强制转换来获取数据:

foreach (Dictionary<string, object> item in (IEnumerable)answer)
{
    Console.WriteLine("id: " + item["id"]);
    if (item.ContainsKey("children"))
    {
        Console.WriteLine("children:");
        foreach (Dictionary<string, object> child in (IEnumerable)item["children"])
        {
            Console.WriteLine("   id: " + child["id"]);
        }
    }
}
然后,我们可以使用
反序列化()
方法代替
反序列化对象()
。现在很明显数据是什么类型的,我们可以像处理任何其他对象一样轻松地处理它

List<Item> answer = json_serializer.Deserialize<List<Item>>(result);

foreach (Item item in answer)
{
    Console.WriteLine("id: " + item.Id);
    if (item.Children != null)
    {
        Console.WriteLine("children:");
        foreach (Item child in item.Children)
        {
            Console.WriteLine("   id: " + child.Id);
        }
    }
}
List answer=json\u序列化程序。反序列化(结果);
foreach(答案中的项目)
{
Console.WriteLine(“id:+item.id”);
if(item.Children!=null)
{
控制台。WriteLine(“儿童:”);
foreach(Item.Children中的Item子项)
{
Console.WriteLine(“id:+child.id”);
}
}
}

这有帮助吗?

您是否使用谷歌对此进行过简单搜索。。?实际上,在
上有许多关于如何做到这一点的示例/答案,因此
请您多做一点努力。个人的评论得不到分数,评论不是答案。。也看看这个,也许你需要遵循一些例子
List<Item> answer = json_serializer.Deserialize<List<Item>>(result);

foreach (Item item in answer)
{
    Console.WriteLine("id: " + item.Id);
    if (item.Children != null)
    {
        Console.WriteLine("children:");
        foreach (Item child in item.Children)
        {
            Console.WriteLine("   id: " + child.Id);
        }
    }
}