繁体   English   中英

如何从 JSON 创建一个动态的 object,它本身包含 object 的结构

[英]How to create a dynamic object from JSON that itself contains the structure of that object

json.net 中有一个很好的 function 可以将 json 转换为 c# object:

CMyObject myObject = Newtonsoft.Json.JsonConvert.DeserializeObject<CMyObject>(json);

问题是需要预先知道结构。

如果结构本身来自 json 本身,是否有精益方法?

这里以 json 为例:

{
  "data": {
    "255622": {
      "2": {
        "value": "Active"
      },
      "3": {
        "value": null
      }
    }
  },

  "schema": {
    "255622": {
      "name": "NameOfStructure",
      "properties": {
        "2": {
          "multi_value": false,
          "name": "Status",
          "type_name": "String"
        },
        "3": {
          "multi_value": false,
          "name": "StatusDate",
          "type_name": "Date"
        }
      }
    }
  }
}

这应该转换为:

myObject (type NameOfStructure)
myObject.Status = "Active" (type String - single value)
myObject.StatusDate = null (type Date - single value)

有任何想法吗?

实际上,我很确定您可以使用动态关键字来做到这一点。

我现在无法检查,但您应该可以执行以下操作:

dynamic myObject = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(json);

或类似的东西,这有时很有用,因为您仍然可以根据需要解析树或发现类型是什么,然后根据您的用例对这些信息执行某些操作。

我过去也使用过另一种方法,使用 ExpandoObject 而不是动态的。

这取决于您的用例是什么,但这些是我要研究的更多方法

使用json.net你可以很容易地这样做:

dynamic myObject = JsonConvert.DeserializeObject(json);

结果将是动态的,因此您可以通过

var myField = myObject.data.yourJsonfield;

同样使用 Newtonsoft.Json.Linq:

dynamic myObject = JObject.Parse(json);

您可以 在此处找到更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM