您的位置:首页 > Web前端 > JavaScript

C# 将 Json 解析成 DateTable

2015-01-07 19:32 309 查看
#region 将 Json 解析成 DateTable
/// <summary>
/// 将 Json 解析成 DateTable。
/// Json 数据格式如:
///     {table:[{column1:1,column2:2,column3:3},{column1:1,column2:2,column3:3}]}
/// </summary>
/// <param name="strJson">要解析的 Json 字符串</param>
/// <returns>返回 DateTable</returns>
public DataTable JsonToDataTable(string strJson)
{
// 取出表名
var rg = new Regex(@"(?<={)[^:]+(?=:\[)", RegexOptions.IgnoreCase);
string strName = rg.Match(strJson).Value;
DataTable tb = null;

//数据为空返回
if (strJson.Trim().Length == 0)
{
return tb;
}
// 检查strJson是否是json字符串
if (!JsonSplit.IsJson(strJson))
{
return tb;
}

try
{
// 去除表名
strJson = strJson.Substring(strJson.IndexOf("[") + 1);
strJson = strJson.Substring(0, strJson.IndexOf("]"));

// 获取数据
rg = new Regex(@"(?<={)[^}]+(?=})");
MatchCollection mc = rg.Matches(strJson);
for (int i = 0; i < mc.Count; i++)
{
string strRow = mc[i].Value;
string[] strRows = strRow.Split(',');
// 创建表
if (tb == null)
{
tb = new DataTable();
tb.TableName = strName;
foreach (string str in strRows)
{
var dc = new DataColumn();
string[] strCell = str.Split(':');
dc.ColumnName = strCell[0].Replace("\"", "");
tb.Columns.Add(dc);
}
tb.AcceptChanges();
}
// 增加内容
DataRow dr = tb.NewRow();
for (int j = 0; j < strRows.Length; j++)
{
dr[j] = strRows[j].Split(':')[1].Replace("\"", "");
}
tb.Rows.Add(dr);
tb.AcceptChanges();
}
}
catch (Exception ee)
{
MessageBox.Show(ee.ToString());
}
return tb;
}
#endregion


识别一个字符串是否Json格式:http://blog.csdn.net/jiankunking/article/details/42531209

 




格式如下:

{
"table": [
{
"column1": 1,
"column2": 2,
"column3": 3
},
{
"column1": 1,
"column2": 2,
"column3": 3
}
]
}

 

例如:

[{"Code":"MetaDataId","Name":"MetaDataId"},{"Code":"MetadataCode","Name":"编号"},{"Code":"SolutionName","Name":"名称"}]


格式化后:

[
{
"Code": "MetaDataId",
"Name": "MetaDataId"
},
{
"Code": "MetadataCode",
"Name": "编号"
},
{
"Code": "SolutionName",
"Name": "名称"
}
]

 

代码格式化工具:http://tool.oschina.net/codeformat/xml

转化后效果如下:



 

代码来源:http://zhidao.baidu.com/link?url=Qf5sRgBcmErNAAaquKuMZSesDtTLpqWzy61N3sBBV2n4sqdBX-X3Zn-e5EEWO8KmlkhzO8Tbkv31yUbYpwSh076QrXmCgHseCiMjkATl1rO
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息