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

Cannot find a way to Deserialize Json indexed array using Json.Net

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

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

进入

List<Course>

哪里

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

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

尝试为课程对象制作字典:

public class MyData{
  [JsonProperty("success")]
  public bool Success {get;set;}

  public Dictionary<string,Course> Courses{get; private set;}

  public MyData(){
    Courses = new Dictionary<string, Course>();
  } 
}

如果你的索引是一个整数你可以Dictionary<int, Course>

您可以使用 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