I am trying to deserialize json string to datable and I am getting format error.
string str = "{\"Arg1\":\"Arg1Value\",\"Arg2\":\"Arg2Value\",\"DataArray\":[{\"Id\": \"2222\",\"VehicleNo\": \"234354\",\"Amount\":\"1000\"},{\"Id\":\"2226\",\"VehicleNo\":\"2343\",\"Amount\":\"2000\"}]"}";
DataTable data = Newtonsoft.Json.JsonConvert.DeserializeObject<DataTable>(str);
Error:
Unexpected JSON token when reading DataTable. Expected StartArray, got StartObject. Path '', line 1, position 1.","Data":null,"InnerException":null,"HelpURL":null,"StackTraceString":" at Newtonsoft.Json.Converters.DataTableConverter.ReadJson(JsonReader reader, Type objectType, Object existingValue, JsonSerializer serializer)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.DeserializeConvertable(JsonConverter converter, JsonReader reader, Type objectType, Object existingValue)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)\r\n at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)\
Please let me know what is the error with json string.
Your JSON string is structured as an object with properties Arg1, Arg2,
and DataArray
, where DataArray
is an array of objects. the JSON needs to be deserialize as a class first them loop the List
to create DataTable
string str = "{\"Arg1\":\"Arg1Value\",\"Arg2\":\"Arg2Value\",\"DataArray\":[{\"Id\": \"2222\",\"VehicleNo\": \"234354\",\"Amount\":\"1000\"},{\"Id\":\"2226\",\"VehicleNo\":\"2343\",\"Amount\":\"2000\"}]}";
class DataItem
{
public string Id { get; set; }
public string VehicleNo { get; set; }
public string Amount { get; set; }
}
class MyJsonType
{
public string Arg1 { get; set; }
public string Arg2 { get; set; }
public List<DataItem> DataArray { get; set; }
}
var myObject = JsonConvert.DeserializeObject<MyJsonType>(str);
DataTable dataTable = new DataTable();
dataTable.Columns.Add("Id", typeof(string));
dataTable.Columns.Add("VehicleNo", typeof(string));
dataTable.Columns.Add("Amount", typeof(string));
foreach (var item in myObject.DataArray)
{
dataTable.Rows.Add(item.Id, item.VehicleNo, item. Amount);
}