簡體   English   中英

如何將JSON轉為C#中的Datatable(JSON包含一個數組列空值和子文檔值)

[英]How to convert JSON to Datatable(JSON contains one array column empty value and sub document value) in C#

Github API 命中 json 轉換為數據表。 以下是示例 json 數據:

[
  {
    "id": 132,
    "description": "",
    "name": "project",
    "name_with_namespace": "Source Admin / project",
    "path": "project",
    "path_with_namespace": "root/project",
    "created_at": "2019-01-18T08:10:17.594Z",
    "default_branch": "master",
    "tag_list": [],
    "ssh_url_to_repo": "git@codecommit.company.com:root/project.git",
    "http_url_to_repo": "http://codecommit.companyname.com/root/project.git",
    "web_url": "http://codecommit.companyname.com/root/project",
    "readme_url": null,
    "avatar_url": null,
    "star_count": 0,
    "forks_count": 0,
    "last_activity_at": "2019-04-10T06:59:10.992Z",
    "namespace": {
      "id": 1,
      "name": "root",
      "path": "root",
      "kind": "user",
      "full_path": "root",
      "parent_id": null
    }
  },
  {
    "id": 131,
    "description": "",
    "name": "project1",
    "name_with_namespace": "Source Admin / project1",
    "path": "project1",
    "path_with_namespace": "root/project1",
    "created_at": "2019-01-18T08:10:01.909Z",
    "default_branch": "master",
    "tag_list": [],
    "ssh_url_to_repo": "git@codecommit.company.com:root/project1.git",
    "http_url_to_repo": "http://codecommit.company.com/root/project1.git",
    "web_url": "http://codecommit.company.com/root/project1",
    "readme_url": null,
    "avatar_url": null,
    "star_count": 0,
    "forks_count": 0,
    "last_activity_at": "2019-05-29T08:44:03.145Z",
    "namespace": {
      "id": 1,
      "name": "root",
      "path": "root",
      "kind": "user",
      "full_path": "root",
      "parent_id": null
    }
  }
]

轉換時出現兩個問題:

var json1 = JsonConvert.DeserializeObject<DataTable>(json);

1) 由於數組字段為空: "tag_list":[]

錯誤:讀取數據表時出現意外的 JSON 標記:EndArray。 路徑“[0].tag_list”,第 1 行,position 280。

2)因為子文檔: namespace

{"id":1,"name":"root","path":"root","kind":"user","full_path":"root","parent_id":null}

錯誤:讀取數據表時出現意外的 JSON 令牌:StartObject。 路徑“[0].namespace”,第 1 行,position 555。

我不想要所有的列值,只有三個列值:

"id":132,"name":"project",created_at":"2019-01-18T08:10:17.594Z".

因為您有一個復雜的對象(即嵌套類),所以您將不能將此對象反序列化為數據表。 數據表只能表示一個平面的一維數據集。 它無法保存還包含子集的一組數據。

因此,您要做的是將此序列反序列化為對象。 我獲取了您的json,並使用此網站( http://json2csharp.com )將其轉換為一個類:

public class MyObject
{
    public int id { get; set; }
    public string description { get; set; }
    public string name { get; set; }
    public string name_with_namespace { get; set; }
    public string path { get; set; }
    public string path_with_namespace { get; set; }
    public DateTime created_at { get; set; }
    public string default_branch { get; set; }
    public List<object> tag_list { get; set; }
    public string ssh_url_to_repo { get; set; }
    public string http_url_to_repo { get; set; }
    public string web_url { get; set; }
    public object readme_url { get; set; }
    public object avatar_url { get; set; }
    public int star_count { get; set; }
    public int forks_count { get; set; }
    public DateTime last_activity_at { get; set; }
    public Namespace @namespace { get; set; }
}

public class Namespace
{
    public int id { get; set; }
    public string name { get; set; }
    public string path { get; set; }
    public string kind { get; set; }
    public string full_path { get; set; }
    public object parent_id { get; set; }
}

現在,您可以執行以下操作:

var json1 = JsonConvert.DeserializeObject<MyObject>(json);

然后json1將是從您的json創建的對象。 然后從那里輕松獲得所需的值。

編輯:

我只是意識到您的json是一個列表,而不是一個項目,因此它將是:

var json1 = JsonConvert.DeserializeObject<List<MyObject>>(json);

嘗試這個

 ` public static DataTable JsonToDataTable(string Json) { DataTable dt = new DataTable(); try { dt = (DataTable)JsonConvert.DeserializeObject(Json, (typeof(DataTable))); } catch (Exception ex) { string chk = ex.Message; dt = new DataTable(); } return dt; }`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM