2014-07-27 24 views
-1

从API我收到一个JSON对象,看起来像这样:分配JSON值属性在C#

{ 
    "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#中没有这么多。谢谢!

+0

您是否已将json字符串转换为json对象? –

+0

答案似乎很简单,我不确定我是否缺少某些东西。你只需要'TheJSON.main.temp',对吧? – CodingGorilla

+1

主不是数组。它是一个对象,所以TheJSON.main.temp.ToString()。 –

回答

1

主不是数组。它是一个对象,所以

TheJSON.main.temp.ToString() 
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);