从C#中的动态JSON中获取属性名称,然后在foreach循环中使用这些属性



我有下面的json响应(为了这个问题,我把它缩短为只有两条记录(:

[{"Container_Type":"0000CART","Standard_Tare_Weight":1.0,"Container_Type_Key":21363,"Description":"CARTON BOX","Container_Type_Description":"0000CART-CARTON BOX","Default":false,"Standard_Quantity":0.0,"Master_Unit_Type_Key":null,"Master_Unit_Type":"","Standard_Pack_Display":false,"Production_Quantity_Default":false},{"Container_Type":"0000PCTN","Standard_Tare_Weight":35.0,"Container_Type_Key":21375,"Description":"RETURNABLE CONTAINER","Container_Type_Description":"0000PCTN-RETURNABLE CONTAINER","Default":false,"Standard_Quantity":0.0,"Master_Unit_Type_Key":null,"Master_Unit_Type":"","Standard_Pack_Display":false,"Production_Quantity_Default":false}]

以c#代码存储在CCD_ 1中。

我想得到上面的键像";Container_Type"Standard_Tare_Weight";,等被填充到单独的列表中,所以我创建了:

PropertyInfo[] dynamicProperties;
dynamicProperties = json.GetType().GetProperties();

如何在foreach下面写以返回这些属性?

foreach (var property in dynamicProperties)
{
property.Name
}

不返回";Container_Type"Standard_Tare_Weight";,等等,而不是:

Type    Item    Item    IsReadOnly  HasValues   First   Last    Count   Parent  Root    Next    Previous    Path

当我通过这个json循环时,如果我键入属性"的名称;Container_Type":

foreach (var item in json)
{
item.Container_Type
}

它显示了适当的值";0000CART";以及";0000PCTN";。所以我知道这些属性存在于json对象中,但我如何从json对象动态获取它们?

假设我已经完成了这项工作,我如何修改上面的foreach循环,使其从我的属性列表中获取这些属性名称?

也许我的推理是错误的,有更好的方法来处理c#中的json对象。我只想要一些灵活的方法来处理任何json响应并实时转换它,而不需要创建模型/类,也不需要在获得响应之前知道属性名称。

你能给我指正确的方向吗?

使用Newtonsoft的Json.Net,您可以执行以下操作:

var jarr = JArray.Parse(json); // or JsonConvert.DeserializeObject<JArray>(json);
foreach (var prop in jarr.First.Children().OfType<JProperty>())
{
Console.WriteLine(prop.Name);
}
//// OR
//foreach (var prop in ((JObject)(jarr.First)).Properties())
//{
//  Console.WriteLine(prop.Name);
//}
foreach(JObject jObj in jarr)
{
Console.WriteLine(jObj["Container_Type"]);
}

或者只是输出你可以做的属性:

foreach(JObject jObj in jarr)
{
foreach (var prop in jObj.Properties())
{
Console.WriteLine($"{prop.Path}-{prop.Name}-{prop.Value.ToString()}");
}
}

最新更新