将JSON数组反序列化为强类型的.NET对象

问题描述 投票:44回答:8

[当我可以调用第三方api并获取单个类的数据时,使用此代码可以反序列化一切正常

TheUser me = jsonSerializer.Deserialize(response, typeof(TheUser)) as TheUser

当我尝试反序列化数组的JSON响应内容时出现问题,例如

{
   "data": [
      {
         "name": "A Jones",
         "id": "500015763"
      },
      {
         "name": "B Smith",
         "id": "504986213"
      },
      {
         "name": "C Brown",
         "id": "509034361"
      }
   ]
}

我只能在“数据”成员周围使用自定义包装类,并且该成员的类型必须为List<object>,才能使序列化工作。如果它的类型为List<TheUser>,则可以从ArgumentException方法中获得JsonParser DesializeType

我最初试图在没有这种包装类型的情况下进行序列化

List<TheUser> freinds = jsonSerializer.Deserialize(response, typeof(List<TheUser>)) as List<TheUser>;

但这只是返回一个空集合。当然,我必须能够使数组反序列化为强类型列表。

c# windows-phone-7 json.net hammock
8个回答
31
投票
如果直接使用Json.Net,则可以反序列化为包装对象内部的强类型集合。

12
投票

8
投票

7
投票

7
投票

2
投票
,即使只有1个条目。

0
投票
public class UsersResponse { public List<User> Data { get; set; } }

0
投票
using (var webClient = new WebClient()) { var response = webClient.DownloadString(url); JObject result = JObject.Parse(response); var users = result.SelectToken("data"); List<User> userList = JsonConvert.DeserializeObject<List<User>>(users.ToString()); }
© www.soinside.com 2019 - 2024. All rights reserved.