Десериализация 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.