c#JSON将数据表的集合/列表反序列化为动态对象

时间:2019-07-28 23:25:57

标签: c# json json-deserialization

我有一些JSON消息,我试图将其转换为动态对象,以便可以访问消息内的DataTables列表。始终会有一个DataTables列表,但是该列表的大小可以从1到许多DataTables有所不同。消息示例如下:

{
  "MessageHeader": "40ec2943-05d4-46f8-a052-030df39bfb16",
  "ResponseId": null,
  "TimeToProcess": 0.0355295,
  "CreatedDateTime": "2019-07-29T03:05:04.8430078+10:00",
  "TableReference": {
    "TableName": "CONSOLIDATED",
    "ReferenceKeyId": 1699,
    "IncludedTables": [
      "TLog010000ItemSale",
      "TLog040000Tender",
      "TLog050000TicketEnd",
      "TLog210000TicketStart",
      "TLog_Header"
    ]
  },
  "SAPStoreReference": "A777",
  "SourceData": [
    [
      {
        "TRS_KEY": 1699,
        "TRS_PTR": 59
      }
    ],
    [
      {
        "TRS_KEY": 1699,
        "TRS_PTR": 61,
        "Opcode": null,
        "TndrID": 1,
        "ChangeTndr": false
      },
      {
        "TRS_KEY": 1699,
        "TRS_PTR": 64,
        "Opcode": null
      }
    ],
    [
      {
        "TRS_KEY": 1699,
        "TER_ID": 1,
        "TICKET_ID": 556,
        "WRK_DT": null,
        "TRS_PTR": 57,
        "DATE_TIME": "2019-07-29T03:04:28",
        "TRS_TYPE": 0,
        "END_PTR": 79
      }
    ]
  ],
  "fromLocation": {
    "LocationType": 0,
    "locationIdentifier": "P777S001"
  },
  "toLocation": {
    "LocationType": 1,
    "locationIdentifier": ""
  }
}

我正在通过以下内容转换为动态

                dynamic dynMessage = JsonConvert.DeserializeObject<dynamic>(message.Body);

                context.Logger.LogLine($"Dynamic unpack message header {dynMessage.MessageHeader}");
                context.Logger.LogLine($"Dynamic unpack table name {dynMessage.TableReference.TableName}");

并且可以很好地访问上述元素,因为它们是根级别。但是,我不清楚用于访问SourceData中的数据表列表的语法。原始消息从以下对象转换为JSON

public List<DataTable> SourceData { get; set; }

我希望能够将JSON数据转换回DataTables,然后可以遍历和使用它。我只是不确定在动态对象中实际访问这些元素的语法是什么。

编辑:抱歉,我试图缩短JSON以使它出现的时间不长,我已经塞满了一些格式,并且可能砍了几个方括号。 SourceData的结构将始终为

SourceData [

[数据表],[数据表],[数据表]等。

]

0 个答案:

没有答案