循环 C#/JSON 子元素

Looping C#/JSON child elements

我想把“order_product”字段(order_id,model)中的这些值放到for或foreach循环中怎么办?

我分享了以下几行作为示例。有很多这样的副线

{
"orders":[
{
"order_product":[
{
"order_product_id":"2189",
"order_id":"1688",
"model":"IT.KZ.1933"
},
{
"order_product_id":"2190",
"order_id":"1688",
"model":"IT.KZ.1830"
}
],
"id":"1688",
"entegration":"Ticimax"
}
]
}

首先,如果您想使用 c# 语言构造,您应该使用一些 json 反序列化器(例如 System.Text.Json.JsonSerializer)将 json 反序列化为 c# 对象。为此,您需要创建一个对应 json 字段的模型。 Microsoft Docs 中描述了这些步骤:https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to?pivots=dotnet-6-0 .

在您的情况下,您的 C# 模型将包含一个数组或一个订单列表。每个订单将包含一个名为 order_product 的数组。然后,您将能够在该数组或您的 json 反序列化器支持并包含 GetEnumerator() 方法的任何其他数据结构上使用 foreach 循环。

在你的 VS IDE 中,创建一个新的 class,将问题中的 JSON 复制到剪贴板,然后编辑 -> 选择性粘贴 -> Paste JSON as classes。 VS会自动生成classes。 然后使用 JsonSerializer 您可以反序列化您的 JSON 数据,如下所示,并且可以使用 foreach 迭代 order_product 及其值。

string ordJson = File.ReadAllText(@"C:\myData\orders.json");
OrdersColl myOrders = JsonSerializer.Deserialize<OrdersColl>(ordJson);
foreach (Order myorder in myOrders.orders)
{
   foreach( Order_Product order_Prod in  myorder.order_product)
   {
       Console.WriteLine($"Model : {order_Prod.model} , order id : 
                    {order_Prod.order_product_id}");
   }
}

以下是VSIDE根据您在问题中给出的JSON生成的classes..

public class OrdersColl
{
    public Order[] orders { get; set; }
}

public class Order
{
      public Order_Product[] order_product { get; set; }
      public string id { get; set; }
      public string entegration { get; set; }
}
 public class Order_Product
 {
       public string order_product_id { get; set; }
       public string order_id { get; set; }
       public string model { get; set; }
 }