я получил следующие данные JSonJson.Net - Deserialize объект с «динамическими» свойствами
{
"HasErrors": false,
"Includes": {
"Products": {
"091006": {
"hej" : "tja"
},
"091026": {
"hej" : "tjafsafsa"
}
}
}
}
Под динамическим JSON я имею в виду, что propertys на продукты класса меняется, так что я не могу жёстко их в C# класса так же, как и с «HasErrors».
Пример:
{
"HasErrors": false,
"Includes": {
"Products": {
"091006": {
"hej" : "tja"
},
"091026": {
"hej" : "tjafsafsa"
}
}
}
}
Другой пример:
{
"HasErrors": false,
"Includes": {
"Products": {
"091126": { //CHANGED
"hej" : "tja"
},
"091043226": { //CHANGED
"hej" : "tjafsafsa"
}
}
}
}
Я создал следующие классы в .NET
Response.cs
public class Response<T> where T : new()
{
[JsonProperty("hasErrors")]
public bool HasErrors { get; set; }
[JsonProperty("includes")]
public Includes<T> Includes { get; set; }
}
Includes.cs
public class Includes<T> where T : new()
{
[JsonProperty("products")]
public ProductRoot Products { get; set; }
}
ProductRoot.cs
public class ProductRoot
{
[JsonProperty("products")]
public Dictionary<string, Product> Products { get; set; }
}
Product.cs
public class Product
{
[JsonProperty("hej")]
public string Hej { get; set; }
}
Я затем попытаться Deserialize это так:
var hej = JsonConvert.DeserializeObject<Response<Product>>(json_from_above_as_string);
И тогда я получаю эту ошибку:
Не удалось литым или конвертировать из System.String в www.Models.Externals.Product.
[JsonSerializationException: значение преобразования ошибки «091006» для ввода «www.Models.Externals.Product». Path 'Includes.ProductsOrder [0]', строка 1, позиция 15173.]
Вы, ребята, знаете, что я делаю неправильно?
Как работает динамика JSON? Не всегда ли это следует за этой структурой? Это должно быть довольно простой бит JSON для десериализации. – mason
Ах, извините, да, это соответствует той же структуре, но продукты отличаются друг от друга, 091006 иногда может быть 091009 или 091012. Поэтому я не могу просто добавить тезисы как свойства в классе C#, вы меня понимаете? Я обновил свой пост. – JOSEFtw