在C#中将JSON值分配给属性

时间:2014-07-27 13:13:19

标签: c# json

从API我收到一个如下所示的JSON对象:

{
  "wind" : {
    "speed" : 7.31,
    "deg" : 187.002
  },
  "rain" : {
    "3h" : 0
  },
  "clouds" : {
    "all" : 92
  },
  "coord" : {
    "lon" : 139,
    "lat" : 35
  },
  "dt" : 1369824698,
  "id" : 1851632,
  "cod" : 200,
  "weather" : [
    {
      "id" : 804,
      "main" : "clouds",
      "icon" : "04n",
      "description" : "overcast clouds"
    }
  ],
  "main" : {
    "humidity" : 89,
    "temp_max" : 292.04,
    "temp_min" : 287.04,
    "temp" : 289.5,
    "pressure" : 1013
  },
  "sys" : {
    "country" : "JP",
    "sunrise" : 1369769524,
    "sunset" : 1369821049
  },
  "name" : "Shuzenji"
}

我想将两个值分配给我的班级:

public class Weather {
  public string Name { get; set; }
  public string Temp { get; set; }
}

我可以这样指定名称:

weather.Name = TheJSON.name.ToString();

但是温度比较棘手,因为它嵌套在“主”阵列中。我已经看过许多关于如何在Javascript中执行此操作的示例,但在C#中没有这么多。谢谢!

2 个答案:

答案 0 :(得分:1)

使用JSON数据的最简单方法是将它们反序列化为C#对象,并直接在应用程序中使用它们。您可以使用JSON C# Class Generator之类的工具从JSON数据中自动生成C#类。生成C#类后,可以使用JsonConvert.DeserializeObject(jsonText)反序列化JSON字符串;生成的代码需要Newtonsoft Json.NET,您可以轻松添加NuGet package

如果将JSON内容保存在D:\ test.json中,则可以使用以下代码使用生成的C#对象访问值。以下示例仅为您提供有关使用情况的信息。

var json = File.ReadAllText(@"D:\test.json");
var weather = JsonConvert.DeserializeObject<Weather>(json);
Console.WriteLine(weather.Name);
Console.WriteLine(weather.Sys.Country);

答案 1 :(得分:1)

Main不是数组。这是一个对象,所以

TheJSON.main.temp.ToString()