【发布时间】:2018-07-19 23:17:18
【问题描述】:
我有一个 json 对象。我想将其反序列化为IEnumerable 类型的对象。
我在 asp.net Core 工作。
我是这样尝试的:
IEnumerable div = (IEnumerable)JsonConvert.DeserializeObject(value, typeof(IEnumerable));
这里的值是json变量。
我遇到了这种类型的异常:
Newtonsoft.Json.JsonSerializationException: '无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.IEnumerable' 因为该类型需要 JSON 数组(例如 [1,2,3])以正确反序列化。 要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3])或更改反序列化类型,使其成为普通的 .NET 类型(例如,不是像整数这样的原始类型,不是集合类型 像数组或列表)可以从 JSON 对象反序列化。 JsonObjectAttribute 也可以添加到类型中以强制它 从 JSON 对象反序列化。
Json 文件:
{
"name": "xx",
"place": {
"native": "aa",
"school": "ee",
"college": "dd"
},
"dob": "ss",
"ids": [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120
],
"mark": [
{
"10thmark": "345",
"12thmark": "1100"
},
{
"Diploma": "G",
"Diploma PG": "R"
},
{
"Ug": "D",
"PG": "E"
}
]
}
如何解决?
【问题讨论】:
-
如果 JSON 字符串包含一个数组,则结果将是一个数组。无需指定
IEnumerable类型。 -
如果仍未修复,请提供代码和JSON。
-
如果您的输入每行包含一个不带括号的对象,则它 NOT 是一个有效的 JSON 文件。您不应该尝试一次反序列化所有内容。这种形式旨在流式传输大量对象,而无需读取整个字符串。而是一次读取和解析一行。
-
@JyothishBhaskaran,我附上了 Json 文件。请参考以上内容。
-
@Nivitha Gopalakrishnan ,你不能直接用 IEnumrable 反序列化它,如果你仔细看看你的 json 它是一个键值对并且你需要一个视图模型,请看我的回答它可能对你有帮助跨度>
标签: c# json asp.net-core deserialization json-deserialization