找不到使用 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
我正在尝试找出一种方法来反序列化 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