將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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM