我有下面的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()}");
}
}