C# 无法将Json解析为.NET类
鉴于: 课程包括:C# 无法将Json解析为.NET类,c#,.net,json.net,C#,.net,Json.net,鉴于: 课程包括: public class Venue { [JsonProperty("id")] public string Id { get; set; } [JsonProperty("name")] public string Name { get; set; } [JsonProperty("location")] public Location Location { get; set; } } public class Locat
public class Venue
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("location")]
public Location Location { get; set; }
}
public class Location
{
public long Lat { get; set; }
public long Lng { get; set; }
public int Distance { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Country { get; set; }
}
public class Response
{
private List<Venue> _venues;
[JsonProperty("venues")]
public List<Venue> Venues
{
get { return _venues ?? (_venues = new List<Venue>()); }
set { _venues = value; }
}
}
使用JSON.NET时,如是:
Response response = JsonConvert.DeserializeObject<Response>(jsonString);
Response-Response=JsonConvert.DeserializeObject(jsonString);
反序列化的响应对象有一个空的场所列表,我做错了什么
谢谢您试图反序列化的内容与您定义的要反序列化到的类之间有点不匹配。不幸的是,您还需要另一层间接性。请注意,响应已完成
// theres an outer object here which contains response
{
"meta":{ "code":200 },
"response":{
// you're trying to deserialize this, but it's not the entire response, it's a property of an anonymous object
}
}
因此,如果我创建一个新类
public class ResponseWrapper
{
public object meta;
public Response response;
}
相反,你要做
ResponseWrapper response = JsonConvert.DeserializeObject<ResponseWrapper>(jsonString);
ResponseWrapper response=JsonConvert.DeserializeObject(jsonString);
那就行了
请注意,在使用json.NET进行反序列化时,必须定义与json完全匹配的结构。在这种情况下,您将忽略最外层的对象。这有点麻烦,会产生很多类似于我刚才编写的代码,但有时就是这样。您试图反序列化的内容与您定义的要反序列化到的类有点不匹配。不幸的是,您还需要另一层间接性。请注意,响应已完成
// theres an outer object here which contains response
{
"meta":{ "code":200 },
"response":{
// you're trying to deserialize this, but it's not the entire response, it's a property of an anonymous object
}
}
因此,如果我创建一个新类
public class ResponseWrapper
{
public object meta;
public Response response;
}
相反,你要做
ResponseWrapper response = JsonConvert.DeserializeObject<ResponseWrapper>(jsonString);
ResponseWrapper response=JsonConvert.DeserializeObject(jsonString);
那就行了
请注意,在使用json.NET进行反序列化时,必须定义与json完全匹配的结构。在这种情况下,您将忽略最外层的对象。这是一种烦恼,会产生很多像我刚才写的那样的代码,但有时就是这样。将您的json放到和tada。。。。你有自己的课程……@I4V实际上我不推荐使用这些工具。我让小组里的一个人来做生成对象的事情(还有一件类似的制作模式的事情),它生成的东西全是狗屎。它不理解组成,并不断重新定义相同的对象,但在类型名称的末尾加上一个整数以使其唯一。我最后不得不回去重写他所有的代码。@evanmcdonnal如果它生成了一个狗屎,那就不要使用它。了解一种工具并在它适合您的需要时加以利用,这有什么错呢。您的评论对任何工具都有效,并且只占用空间….@I4V足够公平。我只是指出,根据我的经验,这个工具只为最简单的json生成了有用的代码。。。。你有自己的课程……@I4V实际上我不推荐使用这些工具。我让小组里的一个人来做生成对象的事情(还有一件类似的制作模式的事情),它生成的东西全是狗屎。它不理解组成,并不断重新定义相同的对象,但在类型名称的末尾加上一个整数以使其唯一。我最后不得不回去重写他所有的代码。@evanmcdonnal如果它生成了一个狗屎,那就不要使用它。了解一种工具并在它适合您的需要时加以利用,这有什么错呢。您的评论对任何工具都有效,并且只占用空间….@I4V足够公平。我只是指出,根据我的经验,这个工具只为最简单的json生成了有用的代码。我认为这就是问题所在,但希望它不是真的。它工作得很好,只要系统允许,我会尽快标记为答案。;)我以为这就是问题所在,但我希望这不是真的。它工作得很好,只要系统允许,我会尽快标记为答案。;)