这让我感到难过。这是我简化的C#类定义:
public class Countries
{
string TotalCount { get; set; }
public List<Ctry> Country { get; set; }
}
public class Ctry
{
string CountryId { get; set; }
string CountryName { get; set; }
}
我进行的REST调用成功,并返回以下可以在'content'变量中看到的JSON:
{"TotalCount":1,"Country":[{"CountryId":1,"CountryName":"USA"}]}
这是我的c#反序列化代码:
var content = response.Content;
countryList = JsonConvert.DeserializeObject<Countries>(content);
反序列化后,我希望国家/地区数据位于countryList对象中。但是在countryList中没有数据显示!是什么赋予了?也没有例外或错误!
答案 0 :(得分:0)
您的问题是JSON.NET默认为驼峰式属性名称。默认情况下,这就是您的代码正在寻找的内容:
{"country":[{"countryId":"1","countryName":"USA"}]}
您需要为模型手动声明JSON.NET属性名称:
public class Countries
{
[JsonProperty(PropertyName = "TotalCount")]
string TotalCount { get; set; }
[JsonProperty(PropertyName = "Country")]
public List<Ctry> Country { get; set; }
}
public class Ctry
{
[JsonProperty(PropertyName = "CountryId")]
string CountryId { get; set; }
[JsonProperty(PropertyName = "CountryName")]
string CountryName { get; set; }
}
我对此进行了测试,并且可以处理您的数据。
作为一个旁注,我声明了所有属性名称,因为我希望保持对序列化和反序列化的手动控制,在您的情况下,您可以仅声明多大小写的单词来尖叫。
如果您不想手动定义属性名称,也可以通过调整属性的保护级别来解决此问题:
public class Countries
{
public string TotalCount { get; set; }
public List<Ctry> Country { get; set; }
}
public class Ctry
{
public string CountryId { get; set; }
public string CountryName { get; set; }
}
通过这种方式,如果JSON.NET是可以公开访问的,则它们可以自动匹配属性名称。
@Tom W-JSON.NET将在可能的情况下自动转换类型,将int转换为string并将string转换为int都可以。