如何使用JSON
框架和HttpClient
使用.NET 4.5.1
库将C#
属性值映射到其他名称的模型属性?
我正在使用Weather Underground中的API,我创建了一个控制台应用程序,只是为了测试它,然后才转移到ASP.NET MVC 5
网络应用程序。
static void Main(string[] args)
{
RunAsync().Wait();
}
static async Task RunAsync()
{
string _address = "http://api.wunderground.com/api/{my_api_key}/conditions/q/CA/San_Francisco.json";
using (var client = new HttpClient())
{
try
{
HttpResponseMessage response = await client.GetAsync(_address);
response.EnsureSuccessStatusCode();
if (response.IsSuccessStatusCode)
{
Condition condition = await response.Content.ReadAsAsync<Condition>();
}
Console.Read();
}
catch (HttpRequestException e)
{
Console.WriteLine("\nException Caught!");
Console.WriteLine("Message :{0} ", e.Message);
}
}
}
我的模型类到这里我需要填充数据:
public class Condition
{
public Response Response { get; set; }
}
public class Response
{
public string Terms { get; set; }
}
我的部分JSON结果:
{
"response": {
"version":"0.1",
"termsofService":"http://www.wunderground.com/weather/api/d/terms.html",
"features": {
"conditions": 1
}
}
}
这是一个非常基本的示例,请如何将JSON中返回的termsofservice值映射到响应类中的Terms属性?如果可能的话,我希望保持在上面使用的库的范围内,而不是解析为JSON.NET
之类的第三方库。如果无法完成,那么我将调查第三方库。
我可能拥有与JSON中返回的数据属性同名的属性的类,但我喜欢在命名属性时坚持最佳实践,并且属性需要具有合适的名称。
答案 0 :(得分:6)
可能有点太晚了,但是为了将来的参考。
您可以使用System.Runtime.Serialization中的DataMember属性映射json变量名称。将该类标记为DataContract。请注意,使用此方法,要从json字符串映射的每个变量都必须具有DataMember属性,而不仅仅是具有自定义映射的属性。
using System.Runtime.Serialization;
[DataContract]
public class Response
{
[DataMember(Name = "conditions")]
public string Terms { get; set; }
[DataMember]
public string Foo { get; set; }
public int Bar { get; set; } // Will not be mapped
}