Здесь я вижу несколько вопросов.
Во-первых, ваш JSON недействителен; он кажется лишь фрагментом. Действительный, полный JSON будет выглядеть следующим образом. (Я добавил вмещающих скобки, удалил Запятую и сбалансирован скобка для payment_info
объекта.)
{
"payment_info": {
"fb_id": "",
"order_items": {
"0": {
"product_id": "4534",
"type": "product",
"shipping_cost_per_item": "1.00",
"quantity": "3",
"price_each": "10.00",
"price_total": "30.00"
}
}
}
}
Поскольку ваш фрагмент заключен в объекте, вам потребуется соответствующий класс верхнего уровня для десериализации в. Для этого класса требуется свойство payment_info
, чтобы сохранить класс OrderItems
. (Я бы рекомендовал переименовать этот класс PaymentInfo
, если это возможно, чтобы избежать путаницы.)
Во-вторых, в Items
свойство внутри OrderItems
класса не соответствует JSON. В JSON он называется order_items
. Поскольку они не совпадают, вы получите нулевое значение при десериализации. Вам необходимо переименовать свойство или использовать атрибут [JsonProperty]
, чтобы указать имя свойства JSON.
В-третьих, свойство order_items
в вашем JSON - это не список; это объект. Поэтому вы получите сообщение об ошибке, если попытаетесь десериализовать его в список (как только вы исправите имя свойства). Обычным решением для этой ситуации является использование Dictionary<string, T>
вместо List<T>
.
Собираем все вместе, если вы сделаете свои классы, как это:
public class RootObject
{
public PaymentInfo payment_info { get; set; }
}
public class PaymentInfo
{
public Dictionary<string, OrderItem> order_items { get; set; }
}
public class OrderItem
{
public string product_id { get; set; }
public string type { get; set; }
public string shipping_cost_per_item { get; set; }
public string quantity { get; set; }
public string price_each { get; set; }
public string price_total { get; set; }
}
Тогда вы можете десериализации, как это:
RootObject root = JsonConvert.DeserializeObject<RootObject>(json);
foreach (OrderItem item in root.payment_info.order_items.Values)
{
Console.WriteLine("product id: " + item.product_id);
Console.WriteLine("type: " + item.type);
Console.WriteLine("shipping cost per item: " + item.shipping_cost_per_item);
Console.WriteLine("quantity: " + item.quantity);
Console.WriteLine("price per item: " + item.price_each);
Console.WriteLine("total price: " + item.price_total);
}
Скрипки: https://dotnetfiddle.net/e0t8gX