在 C# 中反序列化复杂对象
Posted
技术标签:
【中文标题】在 C# 中反序列化复杂对象【英文标题】:deserialize complex object in C# 【发布时间】:2021-09-23 07:53:34 【问题描述】:我有一个无法反序列化的 JSON 对象。它失败并出现以下错误:
Newtonsoft.Json.JsonSerializationException: '无法将当前 JSON 对象(例如 "name":"value")反序列化为类型 'System.Collections.Generic.List1[SampleObj]',因为该类型需要 JSON 数组。
JSON:
"\"rows\":
[
\"ID\":1,
\"Name\":\"Puz\"
,
\"ID\":2,
\"Name\":\"Kez\"
]
"
我已尝试使用 Newtonsoft 进行跟踪:
var deserializeObject = JsonConvert.DeserializeObject<List<SampleObj>>(jsonString);
下面的尝试是使用 javascriptSerializer。
JavaScriptSerializer oJS = new JavaScriptSerializer();
List<SampleObj> deserializeObject = new List<ReportColumns>();
deserializeObject = oJS.Deserialize<List<ReportColumns>>(jsonString);
但两者都报错。
【问题讨论】:
“我遇到了一个错误” - 你能包括那个错误 ....吗?以及你的SampleObj
-class 是什么样的?
第一种方法我得到Newtonsoft.Json.JsonSerializationException: 'Cannot deserialize the current JSON object (e.g. "name":"value") into type 'System.Collections.Generic.List
1[SampleObj]' 因为类型需要 JSON 数组`这个错误
包含您尝试反序列化到的类定义
【参考方案1】:
您的反序列化类似乎与提供的 JSON 结构不匹配。像这样的东西应该适合你:
public class Foo
public List<Bar> rows get; set;
public class Bar
public int ID get; set;
public string Name get; set;
Foo deserializeObject = oJS.Deserialize<Foo>(jsonString);
【讨论】:
【参考方案2】:Newtonsoft 可以使用以下命令安装:
PM>Install-Package Newtonsoft.Json -Version 13.0.1
示例用法:
string json = @"
'Email': 'james@example.com',
'Active': true,
'CreatedDate': '2013-01-20T00:00:00Z',
'Roles': [
'User',
'Admin'
]
";
Account account = JsonConvert.DeserializeObject<Account>(json);
Console.WriteLine(account.Email);
【讨论】:
以上是关于在 C# 中反序列化复杂对象的主要内容,如果未能解决你的问题,请参考以下文章
使用 LitJson 在 C# 中反序列化 JSON 对象数组 [重复]