Десериализация hal json с вложенным массивом объектов

У меня был хороший взгляд на решение этой проблемы, но я не знаю, как решить проблему.

Я получаю JSON, как следует из внутреннего веб-службы

{
  "_embedded" : {
    "Country" : [ {
      "countryId" : 6,
      "countryCode" : "UK",
      "countryName" : "United Kingdom",
      "_links" : {
        "self" : {
          "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/6"
        },
        "country" : {
          "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/6"
        },
        "dataCenters" : {
          "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/6/dataCenters"
        }
      }
    }, {
      "countryId" : 7,
      "countryCode" : "US",
      "countryName" : "United States",
      "_links" : {
        "self" : {
          "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/7"
        },
        "country" : {
          "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/7"
        },
        "dataCenters" : {
          "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/7/dataCenters"
        }
      }
    }, {
      "countryId" : 8,
      "countryCode" : "JAP",
      "countryName" : "Japan",
      "_links" : {
        "self" : {
          "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/8"
        },
        "country" : {
          "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/8"
        },
        "dataCenters" : {
          "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/8/dataCenters"
        }
      }
    }, {
      "countryId" : 11,
      "countryCode" : "SNG",
      "countryName" : "Singapore",
      "_links" : {
        "self" : {
          "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/11"
        },
        "country" : {
          "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/11"
        },
        "dataCenters" : {
          "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/11/dataCenters"
        }
      }
    }, {
      "countryId" : 12,
      "countryCode" : "HK",
      "countryName" : "Hong Kong",
      "_links" : {
        "self" : {
          "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/12"
        },
        "country" : {
          "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/12"
        },
        "dataCenters" : {
          "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/12/dataCenters"
        }
      }
    }, {
      "countryId" : 5000002,
      "countryCode" : "SA",
      "countryName" : "SOUTH AFRICA",
      "_links" : {
        "self" : {
          "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/5000002"
        },
        "country" : {
          "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/5000002"
        },
        "dataCenters" : {
          "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/5000002/dataCenters"
        }
      }
    }, {
      "countryId" : 5000003,
      "countryCode" : "RUS",
      "countryName" : "Russia",
      "_links" : {
        "self" : {
          "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/5000003"
        },
        "country" : {
          "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/5000003"
        },
        "dataCenters" : {
          "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/5000003/dataCenters"
        }
      }
    } ]
  },
  "_links" : {
    "self" : {
      "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country"
    },
    "profile" : {
      "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/profile/Country"
    },
    "search" : {
      "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/search"
    }
  },
  "page" : {
    "size" : 20,
    "totalElements" : 7,
    "totalPages" : 1,
    "number" : 0
  }
}

Я использую Restsharp, чтобы использовать restful-сервис, который предоставляет JSON и создал следующий POCO для человека Country

public class Country
{
    public Country()
    {
        DataCenters = new List<DataCenter>();
    }

    [DeserializeAs(Name="countryId")]
    public string CountryID { get; set; }
    [DeserializeAs(Name="countryCode")]
    public string CountryCode { get; set; }
    [DeserializeAs(Name="countryName")]
    public string CountryName { get; set; }

    [DeserializeAs(Name = "dataCenters")]
    public virtual List<DataCenter> DataCenters { get; set; }
}

Как вы можете видеть, я добавил необходимые аннотации, чтобы сопоставить свойства с правильными значениями, и если я ищу один Countryи получить JSON ниже

{
  "countryId" : 6,
  "countryCode" : "UK",
  "countryName" : "United Kingdom",
  "_links" : {
    "self" : {
      "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/6"
    },
    "country" : {
      "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/6"
    },
    "dataCenters" : {
      "href" : "http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/Country/6/dataCenters"
    }
  }
}

тогда я могу успешно десериализовать JSON для объекта следующим образом

var client = new RestClient("http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/");
var request = new RestRequest("Country/{countryId}");
request.AddUrlSegment("countryId", "6");
IRestResponse<Country> response = client.Execute<Country>(request);

Однако, когда я пытаюсь сделать

var client = new RestClient("http://vm-8b0c-1e78.nam.nsroot.net:8080/ssp/");
var countriesRequest = new RestRequest("Country");
var countriesResponse = client.Execute<List<Country>>(countriesRequest);

Я вижу, что я возвращаю JSON в начале вопроса, однако это не десериализация в List<Country> как и ожидалось. Я пробовал несколько разных подходов, но что бы я ни делал, это не сработает.

Может кто-нибудь пролить свет на то, почему это не работает, как ожидалось? Я подозреваю, что это связано с _embedded тег в JSON, но я не мог найти никакой информации о том, как перемещаться в.net.

0 ответов

Другие вопросы по тегам