用Json.net类反序列化JSON对象数组

本文关键字:JSON 对象 数组 反序列化 Json net | 更新日期: 2023-09-27 18:11:53

我试图使用API来获取报告,但我在使用JSON.NET将JSON结果转换为可用信息时遇到了麻烦。我已经看了相当多的例子,但正确的类格式的类是逃避我。

JSON数据:

{
    "status": "OK",
    "data": {
        "event": {
            "Time": "2015-09-01 17:31:47",
            "Username": "user1",
            "IP_Address": "1.2.3.4",
            "Action": "action1",
            "Data": "somedata"
        },
        "event": {
            "Time": "2015-09-01 17:30:30",
            "Username": "user2",
            "IP_Address": "1.2.3.5",
            "Action": "action2",
            "Data": "data"
        }
    }
}

我现在在哪里:

using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
public class aRoot
{
  [JsonProperty("status")]
  public string status { get; set; }
  [JsonProperty("data")]
  public aData data { get; set; }
}
public class aData
{
  [JsonProperty("event")]
  public List<aEvents> events { get; set; }
}
public class aEvents
{
  [JsonProperty("Time")]
  public DateTime time { get; set; }
  [JsonProperty("UserName")]
  public string user { get; set; }
  [JsonProperty("IP_Address")]
  public string ip { get; set; }
  [JsonProperty("Action")]
  public string action { get; set; }
  [JsonProperty("Data")]
  public string data { get; set; }
}
aRoot objReporting = JsonConvert.DeserializeObject<aRoot>(result);

有人有什么想法吗?

编辑:错误输出:

类型为'Newtonsoft.Json '的异常。在Newtonsoft.Json.dll中发生了JsonSerializationException,但未在用户代码中处理

附加信息:无法将当前JSON对象(例如{"name":"value"})反序列化为类型'System.Collections.Generic '。列出' 1[aEvents]',因为该类型需要一个JSON数组(例如[1,2,3])来正确反序列化。

要修复此错误,要么将JSON更改为JSON数组(例如[1,2,3]),要么更改反序列化类型,使其成为可以从JSON对象反序列化的普通。net类型(例如,不是像整数这样的原始类型,也不是像数组或列表这样的集合类型)。还可以将JsonObjectAttribute添加到类型中,以强制它从JSON对象进行反序列化。

data.event路径"。Time',第一行,位置39.

用Json.net类反序列化JSON对象数组

尝试将数据更改为:

{
"status": "OK",
"data": [
    {
        "Time": "2015-09-01 17:31:47",
        "Username": "user1",
        "IP_Address": "1.2.3.4",
        "Action": "action1",
        "Data": "somedata"
    },
    {
        "Time": "2015-09-01 17:30:30",
        "Username": "user2",
        "IP_Address": "1.2.3.5",
        "Action": "action2",
        "Data": "data"
    }
]}

然后将class更改为:

public class aRoot
{
  [JsonProperty("status")]
  public string status { get; set; }
  [JsonProperty("data")]
  public List<aEvents> data { get; set; }
}

你不需要"aData"