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



我正在尝试找出一种反序列化 Json 类型的 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

小提琴:https://dotnetfiddle.net/cpN2DE

尝试为课程对象创建字典:

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>

相关内容

  • 没有找到相关文章

最新更新