将json字符串反序列化为DataTable 对JsonConvert的补充

Posted 秋意-求变

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将json字符串反序列化为DataTable 对JsonConvert的补充相关的知识,希望对你有一定的参考价值。

/// <summary>
/// 扩展方法,将一个Json字符串反序列化为DataTable
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="str"></param>
/// <returns>DataTable</returns>
public static DataTable DerializeToDataTable<T>(this string str)
{
DataTable dt = new DataTable();
if (str[0] == ‘[‘)//如果str的第一个字符是‘[‘,则说明str里存放有多个model数据
{
//删除最后一个‘]‘和第一个‘[‘,顺序不能错。不然字符串的长度就不对了。
//因为每个model与model之间是用 ","分隔的,所以改为用 ";"分隔
str = str.Remove(str.Length - 1, 1).Remove(0, 1).Replace("},{", "};{");
}
javascriptSerializer js = new JavaScriptSerializer();
string[] items = str.Split(‘;‘);//用";"分隔开多条数据
foreach (PropertyInfo property in typeof(T).GetProperties())//反射,获得T类型的所有属性
{
//创建一个新列,列名为属性名,类型为属性的类型。
DataColumn col = new DataColumn(property.Name, property.PropertyType);
dt.Columns.Add(col);
}

//循环,一个一个的反序列化
for (int i = 0; i < items.Length; i++)
{
//创建新行
DataRow dr = dt.NewRow();

//反序列化为一个T类型对象
T temp = js.Deserialize<T>(items[i]);
foreach (PropertyInfo property in typeof(T).GetProperties())
{
//赋值
dr[property.Name] = property.GetValue(temp, null);
}
dt.Rows.Add(dr);
}
return dt;
}

以上是关于将json字符串反序列化为DataTable 对JsonConvert的补充的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 字符串反序列化为多个 C# 对象

将json反序列化为键值对列表[重复]

将json字符反序列化为枚举

将json字符串反序列化为python中的对象

无法将 JSON 字符串反序列化为 C# 对象

System.Text.Json - 将嵌套对象反序列化为字符串