代码之家  ›  专栏  ›  技术社区  ›  Tommy

使用NewtonSoft JSON将JSON解析为C#对象。网

  •  3
  • Tommy  · 技术社区  · 7 年前

    我正在尝试反序列化从Web服务获得的JSON响应。我正在尝试使用NewtonSoft Json。净额。

    我正在尝试解析响应

    var results = JArray.Parse(response.Content);
    

    我得到以下异常

    Newtonsoft。Json。发生JsonReaderException HResult=0x80131500
    消息=从JsonReader读取JArray时出错。当前JsonReader项 不是数组:StartObject。路径“”,第1行,位置1。

    我可能需要定义要返回的对象,但不确定如何指定以下响应(很抱歉格式化,这里的编辑器删除了缩进):

    {"result": [
          {
          "recordType": "sys_ui_script",
          "hits": [],
          "tableLabel": "UI Script"
       },
          {
          "recordType": "sys_script",
          "hits":       [
                      {
                "name": "Approval Events (Non-Task)",
                "className": "sys_script",
                "tableLabel": "sys_script",
                "matches": [            {
                   "field": "script",
                   "fieldLabel": "Script",
                   "lineMatches":                [
                                        {
                         "line": 21,
                         "context": "         updateRecord(current, current.approver.getDisplayValue() + \" rejected the task.\", ",
                         "escaped": "         updateRecord(current, current.approver.getDisplayValue() + " rejected the task.", "
                      }
                   ],
                   "count": 2
                }],
                "sysId": "ad15c8149f4010008f88ed93ee4bcc9f",
                "modified": 1489179469000
             }
          ],
          "tableLabel": "Business Rule"
       }
    
    ]}
    
    2 回复  |  直到 7 年前
        1
  •  5
  •   KreepN    7 年前

    定义类并将其反序列化:

    var results =  JsonConvert.DeserializeObject<RootObject>(response.Content);   
    
    public class LineMatch
    {
        public int line { get; set; }
        public string context { get; set; }
        public string escaped { get; set; }
    }
    
    public class Match
    {
        public string field { get; set; }
        public string fieldLabel { get; set; }
        public List<LineMatch> lineMatches { get; set; }
        public int count { get; set; }
    }
    
    public class Hit
    {
        public string name { get; set; }
        public string className { get; set; }
        public string tableLabel { get; set; }
        public List<Match> matches { get; set; }
        public string sysId { get; set; }
        public long modified { get; set; }
    }
    
    public class Result
    {
        public string recordType { get; set; }
        public List<Hit> hits { get; set; }
        public string tableLabel { get; set; }
    }
    
    public class RootObject
    {
        public List<Result> result { get; set; }
    }
    
        2
  •  3
  •   DaniCE    7 年前

    在解析json对象时,应该使用

    var results = JObject.Parse(response.Content);
    

    JArray。将数组解析为

     ['Small', { 'oneProp': 'Medium' }, 'Large' ]
    

    您可以查看文档 here