如何正确地反序列化和遍历JSON对象数组

3
在我的应用程序中,我以字符串格式获取一些数据,然后将其转换为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个回答

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);
}

使用Debug.WriteLine或Trace.WriteLine比依赖于Conole.WriteLine更好的做法。 - Colin

4
"最简单的方法是按照以下动态方式操作。请注意,此方法可减少代码占用和更易于阅读,而且比其他方法更为简洁:"
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}");

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"]); 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接