【问题标题】:Deserialize JSON Array反序列化 JSON 数组
【发布时间】:2014-06-13 16:04:17
【问题描述】:

我正在尝试使用返回以下 JSON 结构的 API:

{
  standardList: [2]
    0:  {
      created: "/Date(1393282097000)/"
      createdBy: "User Name"
      envId: "1234-1234-1234"
      extension: "nbsq"
      id: "4826-5680-3258"
      modified: "/Date(1328572097000)/"
      modifiedBy: "user Name"
      name: "File Name Here"
      officialVer: 1
      size: 1
      syncMod: 3210357275
      url: "https://www.example.com"
      versions: 1
    }-
    1:  {
      created: "/Date(139345635000)/"
      createdBy: "User Name"
      envId: "2345-2345-2345"
      extension: "nbsq"
      id: "4956-4538-4321"
      modified: "/Date(13934425017000)/"
      modifiedBy: "User Name"
      name: "File Name Here"
      officialVer: 1
      size: 1
      syncMod: 2812280243
      url: "https://www.example.com"
      versions: 1
    }
}

我需要反序列化 standardList 的内容并设置 id 和 name 值。我有一个模型:

public class FolderList
{
    [JsonProperty("standardList")]
    public Folder FolderList { get; set; }
}

public class Folder
{ 
  [JsonProperty("envId")]
  public string Id {get; set;}
  [JsonProperty("name")]
  public string Name {get;set;}
}

我尝试按照here 的建议进行操作并运行

JsonConvert.DeserializeObject<FolderList<Folder>>(json);

但它不起作用,因为响应没有每个项目的 standardList 键,它是一个数组。如何反序列化成数组?

编辑:实际 JSON

{"standardList":[{"created":"\/Date(13963113097000)\/","createdBy":"User Name","envId":"1234-1234-1234","extension":"nbsq","id":"5326-0160-3098","modified":"\/Date(1396323497000)\/","modifiedBy":"User Name","name":"File Name Here","officialVer":1,"size":1,"syncMod":32350008075,"url":"https:\/\/www.example.com","versions":1},{"created":"\/Date(1334556017000)\/","createdBy":"User Name","envId":"1234-1234-1234","extension":"nbsq","id":"4728-1586-4633","modified":"\/Date(13933576017000)\/","modifiedBy":"User Name","name":"File Name Here","officialVer":1,"size":1,"syncMod":2822280170,"url":"https:\/\/www.example.com","versions":1}]}

【问题讨论】:

  • (通常最好报告/显示 实际 JSON,而不是对其进行某种再现。)
  • 最重要的不是有效的 JSON。你能发布实际的 JSON 而不是从浏览器或工具中复制的内容吗?
  • 您通过在 C# 模型中拥有一个数组来反序列化为一个数组。例如:public Folder[] FolderList {get;set;}.
  • FolderList 应该包含某种IEnumerable&lt;Folder&gt;,而不是单个文件夹。
  • @SimonBelanger 我将模型更改为使用数组。 public Folder[] FolderList {get;set;} 但当我调用 JsonConvert.DeserializeObject&lt;FolderList&gt;(json); 时,我从 Netwonsoft.Json.dll 获得了 System.OverflowException

标签: c# json parsing json.net


【解决方案1】:

转到 Json2csharp.com。传入一些有效的 JSON。引用项目中生成的类,然后反序列化到它们中。首先转到 jsonlint 来整理你的 JSON。应该是一种享受。

【讨论】:

  • 或在 Visual Studio 中:编辑 -> 选择性粘贴 -> 粘贴为 JSON 类
  • 谢谢!结果我的 syncMod 键的数据类型错误,这引发了异常。如果没有那个网站,我永远不会注意到。多么棒的资源。
猜你喜欢
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多