My service returns JArray and I wanted to know the best way to convert JArray to object[,] in c#.
Below are some example of JSON JArray responses.
Sample 1:
[{"id":"281","Name":"Sam","FamilyName":"Smith"},{"id":"348","Name":"Dough","FamilyName":"White"}]
Expected result of sample 1:
Sample 2:
[{"Number":"281","CustomerId":"Sam01","UserName":"Smith","Date":"01/01/2020"},{"Number":"348","CustomerId":"Dough01","UserName":"White","Date":"01/01/2020"}]
Expected result of sample 2:
I do not know how many columns and type I would get from my service. That is why I want to convert to object[,].
Currently, I am converting JArray into DataTable and then looping each row, columns to create object[,], I think this is slow.
DataTable dt = (DataTable)JsonConvert.DeserializeObject(json, (typeof(DataTable)));
var multiDimensionalArry = new Object[dt.Rows.Count + 1, dt.Columns.Count];
for (int i = 0; i < dt.Columns.Count; i++)
multiDimensionalArry[0, i] = dt.Columns[i].ColumnName;
for (int j = 1; j <= dt.Rows.Count; j++)
{
var rowItem = dt.Rows[j - 1].ItemArray;
for (int k = 0; k <= rowItem.Length - 1; k++)
{
if (string.IsNullOrEmpty(rowItem[k].ToString()))
multiDimensionalArry[j, k] = "";
else
multiDimensionalArry[j, k] = rowItem[k];
}
}
>` for the data table I sped it up by roughly 45% to 6.74 seconds. Is that what you're looking for? Demo fiddle here https://dotnetfiddle.net/sjfb18 (which uses a much smaller number of rows).
– dbc Jul 03 '20 at 19:56