【问题标题】:How to convert the below json string to a list of objects in C#如何将以下 json 字符串转换为 C# 中的对象列表
【发布时间】:2016-08-31 04:19:25
【问题描述】:

我正在尝试将以下 json 字符串转换为对象列表。我收到一个错误。你能帮忙吗?

string jsonp = @"{
  'data': [ { 'SectionId':1,'Name':'Bachelor ','NavigationRoute':'applicantExam/education','Position':15,IsEducation':true,'IsEducationCollegeDegree':null,'previousSection':null,'nextSection':null,'IsCurrent':null,'SectionCompleted':null},
            { 'SectionId':2,'Name':'Master','NavigationRoute':'applicantExam/education','Position':20,'IsEducation':true,'IsEducationCollegeDegree':null,'previousSection':null,'nextSection':null,'IsCurrent':null,'SectionCompleted':null} ] 
   }";

 ExamSectionModel[] m = JsonConvert.DeserializeObject<ExamSectionModel[]>(jsonp);
 foreach( var x in m)
 {
     Console.WriteLine(x.Name);
 }

【问题讨论】:

标签: json json.net


【解决方案1】:

您的考试部分数据数组不在 JSON 中的根级别;它位于data 属性内的一层。要修复,您需要创建一个包装类,然后反序列化为:

public class RootObject
{
    public ExamSectionModel[] Data { get; set; }
}

public class ExamSectionModel
{
    public int SectionId { get; set; }
    public string Name { get; set; }
    public string NavigationRoute { get; set; }
    public int Position { get; set; }
    public bool IsEducation { get; set; }
    public bool? IsEducationCollegeDegree { get; set; }
    public object previousSection { get; set; }
    public object nextSection { get; set; }
    public bool? IsCurrent { get; set; }
    public bool? SectionCompleted { get; set; }
}

然后:

RootObject root = JsonConvert.DeserializeObject<RootObject>(jsonp);
foreach(var x in root.Data)
{
    Console.WriteLine(x.Name);
}

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

顺便说一句,您的 JSON 似乎在第一行的 'Position':15,IsEducation':true 之前缺少一个引号。我假设这只是问题中的一个错字,但如果不是,你需要在你的 JSON 中修复它,否则它将无法解析。

此外,从技术上讲,您应该在 JSON 中使用双引号,而不是单引号,以符合标准。 (参见JSON.org。)JSON.net 可以处理单引号,但其他解析器可能不那么宽容。

【讨论】:

    猜你喜欢
    • 2014-04-07
    • 2018-05-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多