【问题标题】:C# Deserialization of JSON for use in a foreach loop用于 foreach 循环的 JSON 的 C# 反序列化
【发布时间】:2020-01-31 10:15:01
【问题描述】:

我有从 HTTP 请求发布的 json。我正在尝试反序列化它以在 for each 循环中使用。不幸的是,它的格式是一个对象列表(我相信)。

到目前为止,我有以下内容:

dynamic jsonObj = JsonConvert.DeserializeObject(await req.ReadAsStringAsync());

foreach (var p in jsonObj.hireSchedules)
    {
     ///do something
    }

我的json如下:

{
"hireSchedules": [
    {
        "plant": "7246054",
        "num" : "79",
        "hire": "1137277"
     },
    {
        "plant": "7246055",
        "num" : "80",
        "hire": "1137278"
     }
    ]
}

我有以下课程:

public class HireSchedule
{
    public string plant { get; set; }
    public string num { get; set; }
    public string hire { get; set; }
}

public class RootObject
{
    public List<HireSchedule> hireSchedules { get; set; }
}

任何帮助将不胜感激。谢谢!

【问题讨论】:

  • RootObject jsonObj = JsonConvert.DeserializeObject&lt;RootObject&gt;(await req.ReadAsStringAsync()); ?
  • 在我的 foreach 循环之前使用它时出现以下错误:“foreach 语句无法对 'RootObject' 类型的变量进行操作,因为 'RootObject' 不包含 'GetEnumerator' 的公共实例定义”
  • 当你得到这个错误时,你的foreach语句怎么样?
  • 如上:foreach (var p in jsonObj.hireSchedule) { //stuff }
  • 是的,这是复制/粘贴中的错误

标签: c# json foreach deserialization


【解决方案1】:

其中一种方法是使用Newtonsoft.json nuget,它确实非常强大,所以

var files = JObject.Parse(YourJSON);
var recList = files.SelectTokens("$..hireSchedules").ToList();
foreach (JObject obj in recList.Children())
 {
   foreach (JProperty prop in obj.Children())
      {
        var key = prop.Name.ToString();
        var value = prop.Value.ToString();
         //Do your stuffs here
      }

  }

【讨论】:

    【解决方案2】:

    由于您已经定义了类,因此很容易将其反序列化为它们。然后你就有了一个强类型类,IDE 应该能够帮助你了解如何访问这些属性。

    var json = File.ReadAllText("json1.json");
    var root = JsonConvert.DeserializeObject<RootObject>(json);
    
    foreach (var p in root.hireSchedules)
    {
        ///do something
    }
    

    【讨论】:

    • 使用此方法我收到以下错误:对象引用未设置为对象的实例。所以,它不是反序列化的权利。
    • @jradata 您的 JSON 似乎与您的类不匹配,即使在您上面提供的示例中它也是如此。
    猜你喜欢
    • 1970-01-01
    • 2021-05-23
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 2012-08-26
    相关资源
    最近更新 更多