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