0

I'm trying to get the property of this json:

{
  "dateFrom": "2021-01-01",
  "dateTo": "",
  "totalOrderCount": 2,
  "ordersPerPage": 1000,
  "pageNumber": 1,
  "error": null,
  "orders": {
    "50000": {"offerId": 595},
    "50001": {"offerId": 595}
  }
}

This is my code:

string content = "{... json ...}";
dynamic data = JObject.Parse(content);
dynamic GartnerOrders = data.orders;

With that I can acces the orderId like this:

foreach (var order in orders)
{
    string offerId= order.Last.offerId;
}

But how do I get the orderNo? Here 50000 and 50001

Kresten
  • 810
  • 13
  • 36

2 Answers2

0

Try this

var jsonDeserialized = JsonConvert.DeserializeObject<Root>(json); 
jsonDeserialized.ordersList= jsonDeserialized.orders
Select(kvp => new Order { OrderNo=kvp.Key, offerId =kvp.Value.offerId}).ToList();

var order=jsonDeserialized.ordersList.Where(i=> i.OrderNo=="50001").FirstOrDefault() ;

output

{"OrderNo":"50001","offerId":595}

classes

public class Order

{
    public string OrderNo {get;set;}
    public int offerId { get; set; }
}


public class Root
{
    public string dateFrom { get; set; }
    public string dateTo { get; set; }
    public int totalOrderCount { get; set; }
    public int ordersPerPage { get; set; }
    public int pageNumber { get; set; }
    public object error { get; set; }
    public Dictionary<string, Order> orders { get; set; }
    public List<Order> ordersList {get;set;}
}
Serge
  • 40,935
  • 4
  • 18
  • 45
0

You can do this easily as @TheGeneral mentioned - by deserializing it as a POCO.

See example using JsonSoft below:

Define the classes:

public class Data {
    public stirng dateFrom { get; set; }
    public stirng dateTo { get; set; }
    public int totalOrderCount { get; set; }
    public int ordersPerPage { get; set; }
    public int pageNumber { get; set; }
    public stirng error { get; set; }
    public List<Order> Orders { get; set; }
    
}

public class Orders {
    public int OfferId { get; set; }
}

Import NewtonSoft.Json

Now deserialize the json:

var data = Json.Deserialize<Data>(json);

Then you can do what you want:

var oders = data.Orders;

foreach (var order in orders)
{
    ...
}
CorrieJanse
  • 2,374
  • 1
  • 6
  • 23