[
{"cgsl_text":289,"dw":"1","cgid":129,"gg":"啊啊啊","pm":"A1","sccs":"CS1","cgsl":160,"cglszh":3,"dj":23.4568,"je":1876.544,"fhsl":80,"ph":"76887","scrq":"2017-03-13T00:00:00","xq":"2020-06-19T00:00:00","_id":26,"_uid":26,"_state":"added"},
{"cgsl_text":289,"dw":"1","cgid":129,"gg":"OOOO","pm":"A2","sccs":"CS2","cgsl":160,"cglszh":3,"dj":23.4568,"je":2111.112,"fhsl":90,"ph":"5rew3","scrq":"2016-06-20T00:00:00","xq":"2020-06-19T00:00:00","_id":27,"_uid":27,"_state":"added"},
{"cgsl_text":289,"dw":"1","cgid":129,"gg":"AAAA","pm":"A3","sccs":"CS3","cgsl":160,"cglszh":3,"dj":23.4568,"_id":23,"_uid":23,"je":23.4568,"_state":"modified","fhsl":1,"ph":"43t5","scrq":"2016-06-20T00:00:00","xq":"2020-06-19T00:00:00"},
{"cgsl_text":332,"dw":"1","cgid":132,"gg":"BBB","pm":"A4","sccs":"CS4","cgsl":200,"cglszh":3,"dj":234,"_id":24,"_uid":24,"scrq":"2016-06-20T00:00:00","_state":"modified","xq":"2019-06-15T00:00:00","ph":"87yuj","je":23400,"fhsl":100},
{"cgsl_text":248,"dw":"1","cgid":158,"gg":"BVBB","pm":"A5","sccs":"CS5","cgsl":90,"cglszh":3,"dj":1.345456,"xq":"2019-06-15T00:00:00","je":80.72736,"fhsl":60,"scrq":"2016-06-20T00:00:00","ph":"67yft","_id":28,"_uid":28,"_state":"added"},
{"cgsl_text":248,"dw":"1","cgid":158,"gg":"DFFF","pm":"A6","sccs":"CS6","cgsl":90,"cglszh":3,"dj":1.3455,"_id":25,"_uid":25,"xq":"2019-06-15T00:00:00","_state":"modified","je":26.909999999999997,"fhsl":20,"scrq":"2016-06-20T00:00:00","ph":"45tffc"}]
因为前台填写顺序不同,造成取到的JSON字段顺序混乱,但后台需要把JSON转成DATATABLE直接传入SQLSERVER里面执行,试过网上的JSON转datatable的方法,往datatable里写入值会顺序混乱,因此想问下有没有解决办法。 #region Json 字符串 转换为 DataTable数据集合
/// <summary>
/// Json 字符串 转换为 DataTable数据集合
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
/// <summary>
/// 将json转换为DataTable
/// </summary>
/// <param name="strJson">得到的json</param>
/// <returns></returns>
public static DataTable Json2DataTable(string strJson)
{
//转换json格式
strJson = strJson.Replace(",\"", "*\"").Replace("\":", "\"#").ToString();
//取出表名
var rg = new Regex(@"(?<={)[^:]+(?=:\[)", RegexOptions.IgnoreCase);
string strName = rg.Match(strJson).Value;
DataTable tb = null;
//去除表名
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('#'); if (strCell[0].Substring(0, 1) == "\"")
{
int a = strCell[0].Length;
dc.ColumnName = strCell[0].Substring(1, a - 2);
}
else
{
dc.ColumnName = strCell[0];
}
tb.Columns.Add(dc);
}
tb.AcceptChanges();
} //增加内容
DataRow dr = tb.NewRow();
for (int r = 0; r < strRows.Length; r++)
{
dr[r] = strRows[r].Split('#')[1].Trim().Replace(",", ",").Replace(":", ":").Replace("\"", "");
}
tb.Rows.Add(dr);
tb.AcceptChanges();
} return tb;
}
#endregion
谢谢各位大神,没分了,只有50分了
与字段排列顺序无关,SQLSERVER 总是对号入座的
如果你非要图巧用数组赋值,那自然是后果自负了
我在网上找了个Json.NET转datatable的方法
var dt = JsonConvert.DeserializeObject<DataTable>(s);
至于顺序,不用下标,用列名来表示。
然后实体转DataTable,分两步走。
这两步,在百度上应该都可以找到代码,详细的原理介绍。
直接Json转DataTable的,还没有试过。