我很困惑为什么DeserializeObject
方法不能反序列化有效的JSON:
string source = JsonConvert.SerializeObject(data.Source);
Maintenance ticket_data = JsonConvert.DeserializeObject<Maintenance>(source); //breaks here
当我到达我的端点时,我会收到以下信息:
"ExceptionMessage":“解析值时遇到意外字符:{. Path 'elements',第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的见解都将不胜感激。
发布于 2018-06-06 07:35:23
该错误是由于将对象列表:elements[{}]
反序列化为字符串元素列表:public IEnumerable<string> Elements
造成的
public class Elements {
public DateTime last_updated {get;set;}
public int? entry_id {get; set;}
public string name {get; set;}
}
public IEnumerable<Elements> Elements { get; set; }
还要注意JSON有效负载中的数据类型。有些不是字符串。例如,last_updated
发布于 2018-06-06 06:57:37
我认为问题在于你的元素并不是像你在对象中定义的那样是一个stings数组。从JSON代码片段看,您在elements数组中有对象。
"elements": [{
"last_updated": 5678,
"entry_id": null,
"name": "something",
}
它定义了一个具有last_updated、entry_id、name属性的对象,因此它应该映射到一个类或字典,就像已经在注释中建议的那样。
否则,它在JSON中应该是这样的:
"elements": ["string1", "string2", "string3"]
发布于 2018-06-06 06:08:39
您必须使用List或IEnumerable of string insted Maintenance,如下所示:
var ticket_data = JsonConvert.DeserializeObject<List<string>>(source);
然后设置维护类的元素,如下所示
Elements =ticket_data ;
https://stackoverflow.com/questions/50709520
复制相似问题