如何将JSON值映射到不同名称的模型属性

本文关键字:属性 模型 JSON 映射 | 更新日期: 2023-09-27 17:49:18

如何使用.NET 4.5.1框架和C#使用HttpClient库将JSON属性值映射到不同名称的模型属性?

我正在使用Weather Underground的API,我创建了一个控制台应用程序,只是为了在我转向ASP.NET MVC 5 web应用程序之前进行测试。

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中返回的数据属性具有相同名称的属性的类,但我喜欢在命名属性时坚持最佳实践,并且属性需要有像样的名称

如何将JSON值映射到不同名称的模型属性

也许有点晚了,但为了将来参考。

你可以使用System.Runtime.Serialization中的DataMember属性来映射json变量名。将类标记为datcontract。请注意,使用这种方法,您想要从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
}