【发布时间】:2021-05-10 12:59:42
【问题描述】:
我找不到任何适合我的案例的解决方案。我收到 JSON,然后将其解析为我的类实例。在实例中,我有必须从 JSON 对象模型映射的属性对象模型。一切都很好,但在这个模型我不知道我能收到多少和哪些财产。我想迭代模型中的所有道具并检查它们的类型。我需要这个,因为我想从模型属性生成 EditForm。我尝试过
foreach(PropertyInfo prop in Model.GetType().GetProperties())
但看起来模型是 NewtonSoft.Json.Linq.JObject 的类型。
class Instance
{
public object Model { get; set; }
public List<Label> Labels { get; set; }
public List<Instance> Children { get; set; }
}
【问题讨论】:
-
你check the docs了吗?您可以使用
JObject.Properties,尽管更好的选择可能是将JSON 字符串反序列化为具体对象并使Instance成为泛型类。在任何情况下,将object更改为JObject。 -
碰巧
JObject实现了ICustomTypeDescriptor,因此您可以使用TypeDescriptor.GetProperties(obj)以统一的方式获取Instance或JObject的属性,请参阅dotnetfiddle.net/TssIx7。但是,如果您想以统一的方式获取诸如Instance或DynamicObject之类的ExpandoObject或JObject之类的完全自定义的动态对象的属性,请参阅How do I reflect over the members of dynamic object?。 -
或者您也可以按照 Panagiotis Kanavos 的建议测试对象是否为
JObject并使用JObject.Properties。 -
我不确定它必须如何在 JSON 中查看。因为我无法获取名称没有问题的属性值。"id": null, "caption": "Contactgegevens", "concept" : "duo-abstr_ContactDetailsTitle", "model": [ { "Geslachtsaanduiding": "Man" }, { "Voornaam": "Piet" }, { "Achternaam": "van" }, { "Dijk": "Bestuursnummer" }, { "1111": "Straatnaam" }, { "NL": "Straatweg" },