【问题标题】:How to get all properties or fields from JObject如何从 JObject 获取所有属性或字段
【发布时间】: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) 以统一的方式获取InstanceJObject 的属性,请参阅dotnetfiddle.net/TssIx7。但是,如果您想以统一的方式获取诸如InstanceDynamicObject 之类的ExpandoObjectJObject 之类的完全自定义的动态对象的属性,请参阅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" },

标签: c# json .net json.net


【解决方案1】:

我找到了解决这个问题的方法。一切都在我的 JSON 文件结构中。我给他做了这样的模型:

model:[ {"key":"someKey","value":"someValue"}]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-16
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多