gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 03:55:34 24 4
gpt4 key购买 nike

当我可以调用第 3 方 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>;

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

最佳答案

在查看 the source 之后,对于 WP7 Hammock 实际上并不使用 Json.Net 进行 JSON 解析。相反,它使用自己的解析器,该解析器不能很好地处理自定义类型。

如果使用 Json.Net可以直接反序列化为包装器对象内的强类型集合。

var response = @"
{
""data"": [
{
""name"": ""A Jones"",
""id"": ""500015763""
},
{
""name"": ""B Smith"",
""id"": ""504986213""
},
{
""name"": ""C Brown"",
""id"": ""509034361""
}
]
}
";

var des = (MyClass)Newtonsoft.Json.JsonConvert.DeserializeObject(response, typeof(MyClass));

return des.data.Count.ToString();

和:

public class MyClass
{
public List<User> data { get; set; }
}

public class User
{
public string name { get; set; }
public string id { get; set; }
}

必须使用数据属性创建额外的对象很烦人,但这是构造 JSON 格式对象的方式的结果。

文档: Serializing and Deserializing JSON

关于c# - 将 JSON 数组反序列化为强类型 .NET 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5979434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com