c# - 找不到使用 Json.Net 反序列化 Json 索引数组的方法

标签 c# json serialization json.net deserialization

我正在尝试找出一种反序列化 Json 类型对象的方法:

{
     "0": { "course": { name: "<cource name", .... } },
     "1": { "course": { name: "<cource name", .... } },
     "success": true
}

进入

List<Course>

在哪里

public class Course 
{
    public string Name { get; set; }
}

问题是它不是一个“命名”数组,它用索引代替了属性名。这个数组是动态的,它包含许多元素,即“0”、“1”、“2”等。有没有一种简单的方法可以通过 Json.NET 反序列化它。我显然可以将它反序列化为动态对象,然后一个一个地创建一个 for 循环和查找索引,但我认为 Json.Net 可能对此有更优雅的东西。

最佳答案

您可以使用 Json.Net 的 Linq-to-Json API (JObjects) 来解析 JSON 并将其放入您想要的结构中。例如:

string json = @"
{
     ""0"": { ""course"": { name: ""Foo"" } },
     ""1"": { ""course"": { name: ""Bar"" } },
     ""success"": true
}";

JObject jo = JObject.Parse(json);
List<Course> courses = jo.Properties()
    .Where(p => p.Name != "success")
    .Select(p => p.Value["course"].ToObject<Course>())
    .ToList();

foreach (Course c in courses)
{
    Console.WriteLine(c.Name);
}

输出:

Foo
Bar

fiddle :https://dotnetfiddle.net/cpN2DE

关于c# - 找不到使用 Json.Net 反序列化 Json 索引数组的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29886484/

相关文章:

c# - 单击按钮时隐藏弹出按钮 (DelegateCommand)

java - Jackson JavaTimeModule 用于 Joda 时间?

C# 和 F# lambda 表达式代码生成

ruby-on-rails - Rails to_json 静态方法 : TypeError X is not a symbol

c# - WCF 或自定义套接字体系结构

c# - 缺少 Android 组件 Xamarin

c# - 无法将类型 'System.Collections.Generic.list<fooClass>' 隐式转换为 'System.Collections.Generic.List<T>

python - 在获取 url python 中将数据帧列值作为参数传递

json - 在 Jenkins Pipeline 上解析 JSON (groovy)

c++ - 如何在C++中记录用户定义的POD结构