如何正确反序列化和迭代JSON对象数组

时间:2016-05-06 14:38:36

标签: c# json

在我的应用中,我以字符串格式获取了一些数据,我将其转换为json:

string stringValue = System.Text.Encoding.Default.GetString(message.Value);

var jsonValue = JsonConvert.DeserializeObject(stringValue);

生成的json字符串如下所示:

[
  {
    "LOCATION_ID": 2800,
    "CITY": "Sao Paulo"
  },
  {
    "LOCATION_ID": 1700,
    "CITY": "Seattle"
  },
  {
    "LOCATION_ID": 2300,
    "CITY": "Singapore"
  },
  {
    "LOCATION_ID": 1600,
    "CITY": "South Brunswick"
  },
  {
    "LOCATION_ID": 1500,
    "CITY": "South San Francisco"
  },
  {
    "LOCATION_ID": 1400,
    "CITY": "Southlake"
  },
  {
    "LOCATION_ID": 2600,
    "CITY": "Stretford"
  },
  {
    "LOCATION_ID": 2200,
    "CITY": "Sydney"
  }
]

我可以用什么语法迭代这个json数组,并一次打印出一个json对象?

3 个答案:

答案 0 :(得分:5)

  

我可以使用什么语法迭代这个json数组并打印出来   一次一个json对象?

定义模型:

public class MyModel
{
    public int LOCATION_ID { get; set; }

    public string CITY { get; set; }
}

然后反序列化为此模型:

var models = JsonConvert.DeserializeObject<IList<MyModel>>(stringValue);

现在您可以自由地使用标准C#迭代构造进行迭代,例如foreach关键字:

foreach (MyModel model in models)
{
    Console.WriteLine(model.LOCATION_ID);
    Console.WriteLine(model.CITY);
}

答案 1 :(得分:3)

最简单的方法是使用动力学如下。

请注意,此方法可减少代码占用空间,并且替代方法更具可读性:

var json = @"[
                    {
                    'LOCATION_ID': 2800,
                    'CITY': 'Sao Paulo'
                    },
                    {
                    'LOCATION_ID': 1700,
                    'CITY': 'Seattle'
                    }
            ]";

dynamic parsedArray = JsonConvert.DeserializeObject(json);
foreach (dynamic item in parsedArray)
    Debug.WriteLine($"Location ID: {item.LOCATION_ID} City: {item.CITY}");

答案 2 :(得分:0)

Darin Dimitrov 现场回答。

另一种选择,如果你真的不想要强烈的模特,那就是使用词典及其特质。

var jsonObj = JsonConvert.DeserializeObject<Dictionary<string, string>[]>(stringValue);
foreach (var obj in jsonObj)
{
    Console.WriteLine("{0}: {1}", obj["LOCATION_ID"], obj["CITY"]); 
}