首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JsonConvert.DeserializeObject无法反序列化有效的JSON

JsonConvert.DeserializeObject无法反序列化有效的JSON
EN

Stack Overflow用户
提问于 2018-06-06 05:58:13
回答 3查看 1.3K关注 0票数 0

我很困惑为什么DeserializeObject方法不能反序列化有效的JSON:

代码语言:javascript
复制
string source = JsonConvert.SerializeObject(data.Source);
Maintenance ticket_data = JsonConvert.DeserializeObject<Maintenance>(source); //breaks here

当我到达我的端点时,我会收到以下信息:

"ExceptionMessage":“解析值时遇到意外字符:{. Path 'elements',第21行,位置5。”

我知道这是怎么回事了。Elements有许多不同的属性,Elements是一个数组。

Maintenance类中,我有:

代码语言:javascript
复制
public IEnumerable<string> Elements { get; set; }

我使用JSONLint网站来确保source是有效的JSON,它确实有效。

Maintenance Class

一些JSON输出:

代码语言:javascript
复制
{
  "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的见解都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-06 07:35:23

该错误是由于将对象列表elements[{}]反序列化为字符串元素列表:public IEnumerable<string> Elements造成的

代码语言:javascript
复制
 public class Elements {
  public DateTime last_updated {get;set;}
  public int? entry_id {get; set;}
  public string name {get; set;}
 } 

代码语言:javascript
复制
public IEnumerable<Elements> Elements { get; set; }

还要注意JSON有效负载中的数据类型。有些不是字符串。例如,last_updated

票数 2
EN

Stack Overflow用户

发布于 2018-06-06 06:57:37

我认为问题在于你的元素并不是像你在对象中定义的那样是一个stings数组。从JSON代码片段看,您在elements数组中有对象。

代码语言:javascript
复制
"elements": [{
      "last_updated": 5678,
      "entry_id": null,
      "name": "something",
}

它定义了一个具有last_updated、entry_id、name属性的对象,因此它应该映射到一个类或字典,就像已经在注释中建议的那样。

否则,它在JSON中应该是这样的:

代码语言:javascript
复制
"elements": ["string1", "string2", "string3"]
票数 1
EN

Stack Overflow用户

发布于 2018-06-06 06:08:39

您必须使用List或IEnumerable of string insted Maintenance,如下所示:

代码语言:javascript
复制
var ticket_data = JsonConvert.DeserializeObject<List<string>>(source);

然后设置维护类的元素,如下所示

代码语言:javascript
复制
    Elements =ticket_data ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50709520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档