繁体   English   中英

无法将JSON反序列化为强类型对象

[英]Cannot deserialize JSON to strongly typed object

这是我的JSON字符串

[
  {
    "title": "Archer (2009)",
    "seasonCount": 5,
    "episodeCount": 47,
    "episodeFileCount": 47,
    "status": "continuing",
    "overview": "At ISIS, an international spy agency, global crises are merely opportunities for its highly trained employees to confuse, undermine, betray and royally screw each other. At the center of it all is suave master spy Sterling Archer, whose less-than-masculine code name is \"Duchess.\" Archer works with his domineering mother Malory, who is also his boss. Drama revolves around Archer's ex-girlfriend, Agent Lana Kane and her new boyfriend, ISIS comptroller Cyril Figgis, as well as Malory's lovesick secretary, Cheryl.",
    "nextAiring": "2014-01-21T03:00:00Z",
    "network": "FX",
    "airTime": "7:00pm",
    "images": [
      {
        "coverType": "banner",
        "url": "/MediaCover/7/banner.jpg?lastWrite=635114443841234311"
      },
      {
        "coverType": "poster",
        "url": "/MediaCover/7/poster.jpg?lastWrite=635114443843262329"
      },
      {
        "coverType": "fanart",
        "url": "/MediaCover/7/fanart.jpg?lastWrite=635114443844822347"
      }
    ],
    "seasons": [
      {
        "seasonNumber": 5,
        "monitored": true
      },
      {
        "seasonNumber": 4,
        "monitored": true
      },
      {
        "seasonNumber": 3,
        "monitored": true
      },
      {
        "seasonNumber": 2,
        "monitored": true
      },
      {
        "seasonNumber": 1,
        "monitored": true
      },
      {
        "seasonNumber": 0,
        "monitored": false
      }
    ],
    "year": 0,
    "path": "T:\\Archer (2009)",
    "qualityProfileId": 1,
    "seasonFolder": true,
    "monitored": true,
    "useSceneNumbering": false,
    "runtime": 30,
    "tvdbId": 110381,
    "tvRageId": 23354,
    "firstAired": "2009-09-18T02:00:00Z",
    "lastInfoSync": "2014-01-17T05:10:23.253208Z",
    "seriesType": "standard",
    "cleanTitle": "archer2009",
    "imdbId": "tt1486217",
    "titleSlug": "archer-2009",
    "id": 1
  }
]

这是我要反序列化的对象:

public class SonarrSeriesWrapper
{
    public SonarrSeries[] SonarrSeries { get; set; }
}

public class Image
{
    public string coverType { get; set; }
    public string url { get; set; }
}

public class Season
{
    public int seasonNumber { get; set; }
    public bool monitored { get; set; }
}

[JsonArray]
public class SonarrSeries
{
    public string title { get; set; }
    public int seasonCount { get; set; }
    public int episodeCount { get; set; }
    public int episodeFileCount { get; set; }
    public string status { get; set; }
    public string overview { get; set; }
    public string nextAiring { get; set; }
    public string network { get; set; }
    public string airTime { get; set; }
    public List<Image> images { get; set; }
    public List<Season> seasons { get; set; }
    public int year { get; set; }
    public string path { get; set; }
    public int qualityProfileId { get; set; }
    public bool seasonFolder { get; set; }
    public bool monitored { get; set; }
    public bool useSceneNumbering { get; set; }
    public int runtime { get; set; }
    public int tvdbId { get; set; }
    public int tvRageId { get; set; }
    public string firstAired { get; set; }
    public string lastInfoSync { get; set; }
    public string seriesType { get; set; }
    public string cleanTitle { get; set; }
    public string imdbId { get; set; }
    public string titleSlug { get; set; }
    public int id { get; set; }
}

和我的反序列化代码:

var s = JsonConvert.DeserializeObject<SonarrSeriesWrapper>(jsonData);
return s;

但是我收到以下异常:

Newtonsoft.Json.dll中发生类型为'Newtonsoft.Json.JsonSerializationException'的异常,但未在用户代码中处理

附加信息:无法将当前JSON数组(例如[1,2,3])反序列化为类型'NZBDash.Common.Models.Api.SonarrSeriesWrapper',因为该类型需要JSON对象(例如{“ name”:“ value”} )正确反序列化。

要解决此错误,可以将JSON更改为JSON对象(例如{“ name”:“ value”}),也可以将反序列化类型更改为数组,或者将实现集合接口的类型(例如ICollection,IList)更改为List,例如List从JSON数组反序列化。 还可以将JsonArrayAttribute添加到类型中,以强制其从JSON数组反序列化。

路径'',第1行,位置1。

现在我已经知道这是因为JSON以[开头,因此认为它是JsonArray,但我认为SonarrSeriesWrapper可以解决这一问题(像这样反序列化也会导致错误JsonConvert.DeserializeObject<List<SonarrSeries>>(jsonData);

有人知道为什么它不起作用吗?

使用时发生错误

JsonConvert.DeserializeObject<List<SonarrSeries>>(jsonData);

Newtonsoft.Json.dll中发生类型为'Newtonsoft.Json.JsonSerializationException'的异常,但未在用户代码中处理

附加信息:无法将当前JSON对象(例如{“ name”:“ value”})反序列化为类型'NZBDash.Common.Models.Api.SonarrSeries',因为该类型需要JSON数组(例如[1,2,3] )正确反序列化。

要解决此错误,可以将JSON更改为JSON数组(例如[1,2,3]),也可以更改反序列化类型,使其成为普通的.NET类型(例如,不像整数这样的原始类型,也不像这样的集合类型)数组或列表),可以从JSON对象反序列化。 还可以将JsonObjectAttribute添加到类型中,以强制其从JSON对象反序列化。

路径“ [0] .title”,第3行,位置13。

您应该从SonarrSeries类中删除JsonArray属性,并像这样反序列化json。

var s = JsonConvert.DeserializeObject<SonarrSeries[]>(jsonData)[0];
return s;

通过使用此方法,您不再需要SonarrSeriesWrapper

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM