【问题标题】:Iterating over a JSON object (NOT an array) in C#在 C# 中迭代​​ JSON 对象(不是数组)
【发布时间】:2017-03-01 23:24:15
【问题描述】:

所以,我有一个以下格式的 json 文件

{
  "-KeArK3V02mXYWx2OMWh" : {
    "Description" : "this is a description",
    "Location" : "Atlanta",
    "Name" : "Event One",
    "Time" : "2017-03-01T21:53:12.924645Z"
  },
  "-KeAtCNF_rmewZ_U3PpH" : {
    "Description" : "another description",
    "Location" : "Charlotte",
    "Name" : "Event Two",
    "Time" : "2017-03-01T22:01:25.603547Z"
  },
  "-KeAtd8CQW_EfH3Sw4YQ" : {
    "Description" : "description goes here",
    "Location" : "Toronto",
    "Name" : "Event Three",
    "Time" : "2017-03-01T22:03:19.3953859Z"
  }
}

我有一个名为 Event 的类,其定义如下

class Event {
  public string Description { get; set; }
  public string Location { get; set; }
  public string Name { get; set; }
  public DateTime Time { get; set; }
}

我想通过这个并将每个子节点反序列化为 Event 对象,基本上将整个 JSON 反序列化为 List

问题是事件不在数组中,它们是另一个 JSON 对象的子节点。所以事实证明它并不那么简单

List<Event> elist = JsonConvert.DeserializeObject<List<Event>>(jsonResult);

我看到过类似的问题,询问项目在 JSON 数组中的组织位置,我尝试了那里列出的解决方案,但它们仅在它是实际数组时才有效,而不是我这里的结构。 Google Firebase 是我在这里使用的,不幸的是它不支持 JSON 数组,所以我无法将项目包含在数组中。

我不太习惯 JSON 语法,所以我可能在这里遗漏了一些非常明显的东西,但我完全被难住了。

任何帮助将不胜感激。

【问题讨论】:

  • @JanakaDissanayake 我今天早些时候看了那篇文章并尝试了他们使用的方法。不幸的是,该示例位于数组中,不适用于这种情况
  • 我认为拥有完整的 JSON 文档会很有帮助,否则我们只是猜测。
  • Event 不是个好名字。

标签: c# json firebase firebase-realtime-database


【解决方案1】:

你能试试这个方法吗?这很简单

var str = @"{
'-KeArK3V02mXYWx2OMWh' : {
    'Description' : 'this is a description',
    'Location' : 'Atlanta',
    'Name' : 'Event One',
    'Time' : '2017-03-01T21:53:12.924645Z'
  },
  '-KeAtCNF_rmewZ_U3PpH' : {
    'Description' : 'another description',
    'Location' : 'Charlotte',
    'Name' : 'Event Two',
    'Time' : '2017-03-01T22:01:25.603547Z'
  },
  '-KeAtd8CQW_EfH3Sw4YQ' : {
    'Description' : 'description goes here',
    'Location' : 'Toronto',
    'Name' : 'Event Three',
    'Time' : '2017-03-01T22:03:19.3953859Z'
  }
}";
Dictionary<string, Event> elist = JsonConvert.DeserializeObject<Dictionary<string, Event>>(str);

【讨论】:

  • 这会用 json 对象填充 elist 字典吗?我正在尝试使用这种方法,但我不确定如何从字典中检索值。谢谢
  • 你这是什么意思? elist 字典将有一个字符串作为键和一个 Event 类对象作为值
  • 奇怪的是这对我不起作用,但我的源数据略有不同。在{ 之前和} 之后,我在每个结构周围都有[]。有任何想法吗?是一个JSON数组,每个结构,所以想问问这里的代码需要怎么改?
  • [ an ] 表示数组不是对象
猜你喜欢
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多