[英]How to convert c# arrays to JSON with one array item propety value set as reference to item from another
[英]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.