C# 返回空值的JSON反序列化程序

C# 返回空值的JSON反序列化程序,c#,json,C#,Json,我试图通过一个C#控制台应用程序使用REST API,我已经让Web服务返回JSON文件,格式如下: {"status":200,"result":{"postcode":"SW1W0DT","quality":1,"eastings":528813,"northings":178953,"country":"England","nhs_ha":"London","longitude":-0.145828,"latitude":51.494853,"european_electoral_regi

我试图通过一个C#控制台应用程序使用REST API,我已经让Web服务返回JSON文件,格式如下:

{"status":200,"result":{"postcode":"SW1W0DT","quality":1,"eastings":528813,"northings":178953,"country":"England","nhs_ha":"London","longitude":-0.145828,"latitude":51.494853,"european_electoral_region":"London","primary_care_trust":"Westminster","region":"London","lsoa":"Westminster 023E","msoa":"Westminster 023","incode":"0DT","outcode":"SW1W","parliamentary_constituency":"Cities of London and Westminster","admin_district":"Westminster","parish":"Westminster, unparished area","admin_county":null,"admin_ward":"Warwick","ccg":"NHS Central London (Westminster)","nuts":"Westminster","codes":{"admin_district":"E09000033","admin_county":"E99999999","admin_ward":"E05000647","parish":"E43000236","parliamentary_constituency":"E14000639","ccg":"E38000031","nuts":"UKI32"}}}
我创建了一个类
AddressInfo
,如下所示:

public class AddressInfo {
    public string postcode { get; set; }
    public int quality { get; set; }
    public int eastings { get; set; }
    public int northings { get; set; }
    public string country { get; set; }
    public string nhs_ha { get; set; }
    public string admin_county { get; set; }
    public string admin_district { get; set; }
    public string admin_ward { get; set; }
    public double longitude { get; set; }
    public double latitude { get; set; }
    public string parliamentary_constituency { get; set; }
    public string european_electoral_region { get; set; }
    public string primary_care_trust { get; set; }
    public string region { get; set; }
    public string parish { get; set; }
    public string lsoa { get; set; }
    public string msoa { get; set; }
    public string ccg { get; set; }
    public string nuts { get; set; }
    public object codes { get; set; } 
}
调用API并获取值的代码如下:

string strJSON = string.Empty;

strJSON = rClient.makeRequest();
Console.Write(strJSON);

AddressInfo AI = new AddressInfo();
AI = Newtonsoft.Json.JsonConvert.DeserializeObject<AddressInfo>(strJSON);
string strJSON=string.Empty;
strJSON=rClient.makeRequest();
Console.Write(strJSON);
AddressInfo AI=新地址信息();
AI=Newtonsoft.Json.JsonConvert.DeserializeObject(strJSON);
然而,当我调试时,AI返回的值为“NULL”


谢谢

请注意,您的JSON具有嵌套结构。AddressInfo包含在其
result
属性中,它不在顶层

反序列化整个JSON响应的实际类结构应该如下所示(我调用了类
JsonResponse
,但您可以随意命名它):

然后像这样反序列化它:

JsonResponse res = JsonConvert.DeserializeObject<JsonResponse>(strJSON);
AddressInfo addressInfo = res.result;
JsonResponse res=JsonConvert.DeserializeObject(strJSON);
AddressInfo AddressInfo=res.result;

请注意,JSON具有嵌套结构。AddressInfo包含在其
result
属性中,它不在顶层

反序列化整个JSON响应的实际类结构应该如下所示(我调用了类
JsonResponse
,但您可以随意命名它):

然后像这样反序列化它:

JsonResponse res = JsonConvert.DeserializeObject<JsonResponse>(strJSON);
AddressInfo addressInfo = res.result;
JsonResponse res=JsonConvert.DeserializeObject(strJSON);
AddressInfo AddressInfo=res.result;

您缺少一个事实,即您需要一个具有属性
int status
adresinfo result
的外部类。您缺少一个事实,即您需要一个具有属性
int status
adresinfo result
的外部类,您的JSON是嵌套的。结果是一个嵌套对象。这就是您遇到此问题的原因

您的JSON是嵌套的。结果是一个嵌套对象。这就是您遇到此问题的原因

您不需要创建单独的类来反序列化整个响应,这可以动态完成以获得所需的结果:

var source = "(your JSON");
dynamic data = JObject.Parse(source);   
var d = JsonConvert.SerializeObject(data.result);
AddressInfo account = JsonConvert.DeserializeObject<AddressInfo>(d);
var source=“(您的JSON”);
动态数据=JObject.Parse(源);
var d=JsonConvert.serialized对象(data.result);
AddressInfo account=JsonConvert.DeserializeObject(d);

您不需要创建单独的类来反序列化整个响应,这可以动态完成以获得所需的结果:

var source = "(your JSON");
dynamic data = JObject.Parse(source);   
var d = JsonConvert.SerializeObject(data.result);
AddressInfo account = JsonConvert.DeserializeObject<AddressInfo>(d);
var source=“(您的JSON”);
动态数据=JObject.Parse(源);
var d=JsonConvert.serialized对象(data.result);
AddressInfo account=JsonConvert.DeserializeObject(d);

该死,比我快:P但是是的,我会建议这个。该死,比我快:P但是是的,我也会建议这个