【发布时间】:2017-07-06 17:55:11
【问题描述】:
我想将 json 值转换为数据表,但是当我转换为数据表时,它缺少要在数据表中转换的 id 值。
json
{
"territories": {
"a10b4b1e-8400-4613-8c90-5d282de6a8a6": {
"id": "a10b4b1e-8400-4613-8c90-5d282de6a8a6",
"name": "Connecticut",
"center": [
41603071,
-73087651
],
"timeZoneCode": "America/New_York",
"languageCode": null
},
"dc3d9d82-611e-41ba-a6f6-2c33ac5eebd1": {
"id": "dc3d9d82-611e-41ba-a6f6-2c33ac5eebd1",
"name": "Orlando",
"center": [
28538321,
-81379242
],
"timeZoneCode": "America/New_York",
"languageCode": null
}
}
}
json转数据表的代码
private void ConvertJsonToDataTable( string jasonstring)
{
try
{
string jsonString = jasonstring;
if (!String.IsNullOrWhiteSpace(jsonString))
{
dynamic dynObj = JsonConvert.DeserializeObject(jsonString);
var sOffers = dynObj.territories;
// var sCoupons = dynObj.coupons;
DataTable dtPromotions = new DataTable();
dtPromotions.Columns.Add("id", typeof(string));
dtPromotions.Columns.Add("name", typeof(string));
dtPromotions.Columns.Add("timeZoneCode", typeof(string));
dtPromotions.Columns.Add("languageCode", typeof(string));
foreach (var cou in sOffers)
{
string cou1 = Convert.ToString(cou);
string[] RowData = Regex.Split(cou1.Replace("{", "").Replace("}", ""), ",");
DataRow nr = dtPromotions.NewRow();
foreach (string rowData in RowData)
{
try
{
int idx = rowData.IndexOf(":");
string RowColumns = rowData.Substring(0, idx - 1).Replace("\"", "").Trim();
string RowDataString = rowData.Substring(idx + 1).Replace("\"", "");
nr[RowColumns] = RowDataString;
}
catch (Exception ex)
{
continue;
}
}
dtPromotions.Rows.Add(nr);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "ERROR",MessageBoxButtons.OK, MessageBoxIcon.Information);
}
【问题讨论】:
-
a10b4b1e-8400-4613-8c90-5d282de6a8a6 是稳定的还是每次针对不同的 terrotries 都有不同的值
-
@Abhishek 它每次为不同的 Territroy 提供不同的价值
-
我相信如果您将区域解析为一些区域类,然后(如果需要)您可以将这些值映射到数据表,您的代码将更具可读性
-
@SergeyBerezovskiy 你希望我使用这种方法
List <Territories > tr = JsonConvert.DeserializeObject<List<Territories>>(ter); -
@A.Goutam 完全正确。之后
foreach(var territory in tr)您可以添加数据行而无需替换大括号和其他 json 内容