Не удается перевести массив в Dictionary

207
15 декабря 2021, 16:50

Есть некий объект:

{
  "time": "4ms",
  "total": 14709,
  "prev_page": null,
  "next_page": "/list?page=bk7PjN0b",
  "results": [
    {
      "id": "serial-6590",
      "type": "anime-serial",
      "link": "/serial/6590/a8WA9Rff799ee0",
      "title": "Мина - оружие Луны",
      "title_orig": "Getsumento Heiki Mina",
      "other_title": "月面兎兵器ミーナ",
      "translation": {
        "id": 609,
        "title": "AniDUB"
      },
      "year": 2007,
      "last_season": 1,
      "last_episode": 11,
      "episodes_count": 11,
      "kinopoisk_id": "630152",
      "imdb_id": "tt1990559",
      "worldart_link": "/animation/animation.php?id=5786",
      "quality": "HDTVRip 720p",
      "camrip": false,
      "blocked_countries": [],
      "blocked_seasons": {},
      "created_at": "2017-11-26T00:16:25Z",
      "updated_at": "2019-12-06T14:14:20Z",
      "seasons": {
        "1": {
          "link": "/season/31300/a8WA9R00604a0b",
          "episodes": {
            "1": "/episode/175372/a8WA9R00604a0b",
            "2": "/episode/175373/a8WA9Rd38bfcf3",
            "3": "/episode/175374/a8WA9R4b8e88c4",
            "4": "/episode/175375/a8WA9R52394376",
            "5": "/episode/175376/a8WA9Rfe205eb3",
            "6": "/episode/175377/a8WA9Rc4f56569",
            "7": "/episode/175378/a8WA9R5cb3a446",
            "8": "/episode/175379/a8WA9R7ab36b8a",
            "9": "/episode/175380/a8WA9R9a9b05b8",
            "10": "/episode/175381/a8WA9R00ffc2db",
            "11": "/episode/175382/a8WA9R2986d187"
          }
        }
      },
      "material_data": {
        "title": "Мина – оружие Луны",
        "title_en": "Getsumen To Heiki Mina",
        "year": 2007,
        "poster_url": "/images/film_iphone/iphone360_630152.jpg",
        "duration": 23,
        "countries": [
          "Япония"
        ],
        "genres": [
          "аниме",
          "мультфильм",
          "комедия",
          "фантастика"
        ],
        "imdb_rating": 5.6,
        "imdb_votes": 11,
        "premiere_world": "2007-01-13",
        "actors": [
          "Мария Иноэ",
          "Сидзука Ито",
          "Хироки Тоути"
        ],
        "directors": [
          "Кэйитиро Кавагути"
        ]
      }
    }
  ]
}

И мне необходимо перевести объект seasons как словарь IDictionary<uint, ISeason>.

[JsonConverter(typeof(KodikSeasonConverter))]
public interface ISeason
{
    Uri Link { get; }
    IDictionary<uint, Uri> Episodes { get; }
}
[JsonConverter(typeof(KodikMaterialConverter))]
public interface IMaterial
{
    string Id { get; }
    string Type { get; }
    Uri Link { get; }
    string Title { get; }
    string OriginalTitle { get; }
    string OtherTitle { get; }
    ITranslation Translation { get; }
    uint Year { get; }
    uint LastSeason { get; }
    uint LastEpisode { get; }
    uint EpisodesCount { get; }
    long KpId { get; }
    string ImDbId { get; }
    Uri WorldArtLink { get; }
    string Quality { get; }
    bool IsCamRip { get; }
    IDictionary<uint, ISeason> Seasons { get; }
    DateTimeOffset CreatedAt { get; }
    DateTimeOffset UpdatedAt { get; }
    IMaterialData MaterialData { get; }
}

Конвертер:

internal class KodikMaterialConverter : JsonConverter<IMaterial>
{
    public override void WriteJson(JsonWriter writer, IMaterial value, JsonSerializer serializer)
    {
        serializer.Serialize(writer, value, typeof(KodikMaterialRaw));
    }
    public override IMaterial ReadJson
    (
        JsonReader reader,
        Type objectType,
        IMaterial existingValue,
        bool hasExistingValue,
        JsonSerializer serializer
    )
    {
        if (reader.TokenType != JsonToken.StartObject)
        {
            throw new InvalidCastException();
        }
        return (KodikMaterial)serializer.Deserialize<KodikMaterialRaw>(reader);
    }
}

Модели:

internal class KodikMaterialRaw
{
    [JsonProperty("id")] public string Id { get; internal set; }
    [JsonProperty("type")] public string Type { get; internal set; }
    [JsonProperty("link")] public Uri Link { get; internal set; }
    [JsonProperty("title")] public string Title { get; internal set; }
    [JsonProperty("title_orig")] public string OriginalTitle { get; internal set; }
    [JsonProperty("other_title")] public string OtherTitle { get; internal set; }
    [JsonProperty("translation")] public ITranslation Translation { get; internal set; }
    [JsonProperty("year")] public uint Year { get; internal set; }
    [JsonProperty("last_season")] public uint LastSeason { get; internal set; }
    [JsonProperty("last_episode")] public uint LastEpisode { get; internal set; }
    [JsonProperty("episodes_count")] public uint EpisodesCount { get; internal set; }
    [JsonProperty("kinopoisk_id")] public long KpId { get; internal set; }
    [JsonProperty("imdb_id")] public string ImDbId { get; internal set; }
    [JsonProperty("worldart_link")] public Uri WorldArtLink { get; internal set; }
    [JsonProperty("quality")] public string Quality { get; internal set; }
    [JsonProperty("camrip")] public bool IsCamRip { get; internal set; }
    [JsonProperty("seasons", NullValueHandling = NullValueHandling.Ignore)]
    public IDictionary<uint, ISeason> Seasons { get; internal set; }
    [JsonProperty("created_at")] public DateTimeOffset CreatedAt { get; internal set; }
    [JsonProperty("updated_at")] public DateTimeOffset UpdatedAt { get; internal set; }
    [JsonProperty("material_data")] public IMaterialData MaterialData { get; internal set; }
}
internal class KodikSeason : ISeason
{
    internal KodikSeason(KodikSeasonRaw raw)
    {
        Link = raw.Link;
        Episodes = raw.Episodes;
    }
    public Uri Link { get; }
    public IDictionary<uint, Uri> Episodes { get; }
    public static implicit operator KodikSeason(KodikSeasonRaw raw)
    {
        return new KodikSeason(raw);
    }
}

Но я в итоге получаю всегда пустой ISeason, т.е. объект есть, но все данные в нем null. Как правильно перевести это дело в объект?

READ ALSO
Как кратко инициализировать объекты

Как кратко инициализировать объекты

Как то можно саму инициализацию объектов переписать в меньшое количество строк?

139
Могу ли я создавать элементы визуального интерфейса в MVVM

Могу ли я создавать элементы визуального интерфейса в MVVM

Могу ли я создавать элементы визуального интерфейса в MVVM? Допустим у меня по нажатию кнопки "+" появляется еще один TextBoxКак это прописать во VM?

196
Как убрать слово из строки PHP?

Как убрать слово из строки PHP?

Необходимо убрать слово+символ "- Неисправности" из генерации тега посредством PHPТоварищи-вебмастеры, как можно это осуществить?

174
правильная ли загрузка контента?

правильная ли загрузка контента?

на одной странице есть форма добавление и сразу же отображение результата у виде таблицы, отображение идет с помощью ajax, в консоле в строке...

83