0

Github API hit json conversion to datatable. Following is the sample json data:

[
  {
    "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": "[email protected]: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": "[email protected]: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
    }
  }
]

Two problem araise while converting through:

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

1) because of empty array field: "tag_list":[]

Error: Unexpected JSON token when reading DataTable: EndArray. Path '[0].tag_list', line 1, position 280.

2) because of sub document: namespace

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

Error: Unexpected JSON token when reading DataTable: StartObject. Path '[0].namespace', line 1, position 555.

I don't want all columns values, only three column values:

"id":132,"name":"project",created_at":"2019-01-18T08:10:17.594Z".
2
  • 1
    oh wow. You really need to make this more readable. Hang on, let me see if I can help with that. Commented Sep 13, 2019 at 13:04
  • 1
    Edited your post. Now I'll take a look at your question :) Commented Sep 13, 2019 at 13:08

2 Answers 2

1

Because you have a complex object (meaning, nested classes) you will not be able to Deserialize this to a data tabe. A data table can only represent a flat, one-dimensional set of data. It isn't capable of holding a set of data that also contains sub sets.

So, what you will want to do is Deserialize this into an object. I took your json, and using this website (http://json2csharp.com) converted it into a class:

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; }
}

Now, you can do this:

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

And then json1 will be an object that was created from your json. And from there, it's a snap to obtain the values you need.

EDIT:

I just realized your json is a list, and not a single item, so it would be:

var json1 = JsonConvert.DeserializeObject<List<MyObject>>(json);
Sign up to request clarification or add additional context in comments.

1 Comment

Glad to hear it! Can you mark my answer as correct? Thanks!
0

Try This

`
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;
        }`

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.