【发布时间】:2018-06-05 21:58:13
【问题描述】:
我很困惑为什么 DeserializeObject 方法不能反序列化有效的 JSON:
string source = JsonConvert.SerializeObject(data.Source);
Maintenance ticket_data = JsonConvert.DeserializeObject<Maintenance>(source); //breaks here
当我到达终点时,我收到以下信息:
"ExceptionMessage": "解析时遇到意外字符 价值: {。路径‘元素’,第 21 行,位置 5。”
我知道发生了什么。 Elements 有很多不同的属性,Elements 是一个数组。
在Maintenance 课程中我有:
public IEnumerable<string> Elements { get; set; }
我使用 JSONLint 网站来确保 source 是有效的 JSON,并且确实如此。
一些 JSON 输出:
{
"doc_type": "ticket",
"updated_date": 12345,
"ticket_number": "1234",
"start": 1234,
"summary": "hello",
"description": "do stuff",
"active": true,
"related_tickets": [],
"tags": [],
"elements": [
{
"last_updated": 5678,
"entry_id": null,
"name": "something",
任何关于我为什么不能反序列化这个 JSON 的见解将不胜感激。
【问题讨论】:
-
你能发布一个示例 JSON 和类定义,这很难说。
-
更新了原帖。
-
这是完全有效的 JSON,但不符合维护类的架构。 “元素”中的项目不是字符串。它们是其他一些复杂的对象。创建另一个对象来表示该事物并在元素定义中使用它,
IEnumerable<Element>。如果您并不真正关心获取它的属性,也可以使用 object。 -
将Elements的类型改为IEnumerable
> -
只要你有有效的 JSON,不要尝试手工制作要反序列化的类。使用json2csharp.com,它将产生正确的类定义。
标签: c# .net json serialization