Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting Json object to DataTable

In a few posts here and also on other forums I have found this code quoted for turning a Json object into a DataTable:

DataTable dt = (DataTable)JsonConvert.DeserializeObject(json, (typeof(DataTable)));  

I can't get this to work. It always throws a JsonSerializationException. Am I missing something?

This is simple example to show error:

JObject query = new JObject();
JObject results = new JObject();

results.Add("Name", "Blue Umbrella");
results.Add("Price", 100);

query.Add("results", results);

DataTable dt = (DataTable)JsonConvert.DeserializeObject(query.ToString(), (typeof(DataTable)));

What did I do wrong?

like image 910
Guerrilla Avatar asked Aug 04 '26 00:08

Guerrilla


1 Answers

Use something like:

JArray array = new JArray();

{
    JObject row = new JObject();

    row.Add("Name", "Blue Umbrella");
    row.Add("Price", 100);

    array.Add(row);
}

{
    JObject row = new JObject();

    row.Add("Name", "Green Umbrella");
    row.Add("Price", 200);

    array.Add(row);
}

DataTable dt = JsonConvert.DeserializeObject<DataTable>(array.ToString());

The "container" must be a JArray.

The next time you have a similar problem, as suggested by @Dr. Wily's, simply try serializing something:

var dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Price");

var row = dt.NewRow();
row["Name"] = "Blue Umbrella";
row["Price"] = 100;
dt.Rows.Add(row);

row = dt.NewRow();
row["Name"] = "Green Umbrella";
row["Price"] = 200;
dt.Rows.Add(row);

string serialized = JsonConvert.SerializeObject(dt);

and look at its format:

[{"Name":"Blue Umbrella","Price":"100"},{"Name":"Green Umbrella","Price":"200"}]
like image 69
xanatos Avatar answered Aug 06 '26 13:08

xanatos