如何使用C#中的多个嵌套JSON对象创建DataTable

时间:2016-03-13 23:03:24

标签: javascript c# arrays json

每次我获取动态JSON数据时,它都可以是JSON数组或简单的JSON对象或嵌套的JSON对象。

我正在尝试反序列化并将JSON对象/数组转换为DataTable,以便使用Newtonsoft.Json进行进一步处理。

我的当前代码是

public DataTable ConvertJson2DataTable(string jdata)
    {
        DataTable dt = null;

        try {
            dt = (DataTable)JsonConvert.DeserializeObject(jdata, (typeof(DataTable)));
        }
        catch (Exception ex)
        {
            MessageBox.Show("exception: " +ex.Message.ToString());

        }

        return dt;
    }

它适用于常规JSON对象和数组。

但是在处理一些复杂的JSON对象时,我会在完成反序列化对象后获得JSON字符串中的其他文本。"

这是我的示例JSON DATA

{
  "ads": {
    "items": [],
    "total": 0,
    "page": 1
  },
  "member": {
    "memberId": "649991",
    "displayName": "",
    "email": "hasaxxx@hotodeal.com",
    "memberStatus": "Y",
    "smiId": "7aa205ea-7aa2-7aa2-7aa2-7aa205eac183",
    "facebookId": "100001412016857",
    "registerDate": null,
    "emailConfirmed": false,
    "smsConfirmed": false,
    "facebookConfirmed": false,
    "lineId": null,
    "wechatId": null,
    "displayImage": "",
    "firstName": "Hasadin",
    "lastName": "Pankran",
    "telephone": "",
    "mobile": null,
    "listingCount": {
      "online": 0,
      "edit": 0,
      "waiting": 0
    },
    "phones": null
  }
}    

1 个答案:

答案 0 :(得分:0)

因为table / datatable表示复杂数据结构或关系模型的简单数据结构,所以应该将其转换为数据集而不是数据表。

转换为数据集的JSON结构应如下所示:

{
    "ads": [{ 
         "total": 0, 
         "page": 1 
          }], 
    "member": [{
        "memberId": "649991",
        "displayName": "",
        "email": "hasaxxx@hotodeal.com",
        "memberStatus": "Y",
        "smiId": "7aa205ea-7aa2-7aa2-7aa2-7aa205eac183",
        "facebookId": "100001412016857",
        "registerDate": null,
        "emailConfirmed": false,
        "smsConfirmed": false,
        "facebookConfirmed": false,
        "lineId": null,
        "wechatId": null,
        "displayImage": "",
        "firstName": "Hasadin",
        "lastName": "Pankran",
        "telephone": "",
        "mobile": null 
        }] 
}