Newtonsoft.Json(Json.Net)學習筆記
阿新 • • 發佈:2019-02-06
今天學習了JSON序列化和反序列化的一個方法,特此記一下,順便吐槽一下,新建的model有189個欄位,我還給加了註釋。。。。
Newtonsoft.Json,一款.NET中開源的Json序列化和反序列化類庫
首先引用一個dll,Newtonsoft.Json.dll
將Json序列化和反序列化的簡單封裝為jsonhelper類
自己建的model類,欄位太多,就不全部貼上了public class JsonHelper { /// <summary> /// 將物件序列化為JSON格式 /// </summary> /// <param name="o">物件</param> /// <returns>json字串</returns> public static string SerializeObject(object o) { string json = JsonConvert.SerializeObject(o); return json; } /// <summary> /// 解析JSON字串生成物件實體 /// </summary> /// <typeparam name="T">物件型別</typeparam> /// <param name="json">json字串(eg.{"ID":"112","Name":"石子兒"})</param> /// <returns>物件實體</returns> public static T DeserializeJsonToObject<T>(string json) where T : class { JsonSerializer serializer = new JsonSerializer(); StringReader sr = new StringReader(json); object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T)); T t = o as T; return t; } /// <summary> /// 解析JSON陣列生成物件實體集合 /// </summary> /// <typeparam name="T">物件型別</typeparam> /// <param name="json">json陣列字串(eg.[{"ID":"112","Name":"石子兒"}])</param> /// <returns>物件實體集合</returns> public static List<T> DeserializeJsonToList<T>(string json) where T : class { JsonSerializer serializer = new JsonSerializer(); StringReader sr = new StringReader(json); object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>)); List<T> list = o as List<T>; return list; } /// <summary> /// 反序列化JSON到給定的匿名物件. /// </summary> /// <typeparam name="T">匿名物件型別</typeparam> /// <param name="json">json字串</param> /// <param name="anonymousTypeObject">匿名物件</param> /// <returns>匿名物件</returns> public static T DeserializeAnonymousType<T>(string json, T anonymousTypeObject) { T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject); return t; } }
public class Model
{
public string NameCN = "";//中文姓名
public string NameEN = "";//英文姓名(姓和名之間用/隔開)
}
程式呼叫
Model model = new Model(); model.NameCN = "康"; model.NameEN = "kang"; //實體序列化和反序列化 string json1 = JsonHelper.SerializeObject(model); //json1:{"NameCN":"康","NameEN":"kang"} Model model2 = JsonHelper.DeserializeJsonToObject<Model>(json1); //實體集合序列化和反序列化 List<Model> modelList=new List<Model>(){model,model2}; string json2 = JsonHelper.SerializeObject(modelList); //json2:[{"NameCN":"康","NameEN":"kang"}, //{"NameCN":"康","NameEN":"kang"}] List<Model> modelList2 = JsonHelper.DeserializeJsonToList<Model>(json2); //DataTable序列化和反序列化 DataTable dt = new DataTable(); dt.TableName = "Model"; dt.Columns.Add("NameCN"); dt.Columns.Add("NameEN"); dt.Columns.Add("Remark1"); DataRow dr = dt.NewRow(); dr["NameCN"] = "康"; dr["NameEN"] = "kang"; dr["Remark1"] = "我都不認識這些欄位"; dt.Rows.Add(dr); string json3 = JsonHelper.SerializeObject(dt); //json3 : [{"NameCN":"康","NameEN":"kang","Remark1":"我都不認識這些欄位"}] DataTable modelDt3 = JsonHelper.DeserializeJsonToObject<DataTable>(json3); List<Model> modelList3 = JsonHelper.DeserializeJsonToList<Model>(json3); //驗證物件和陣列 Model model4 = JsonHelper.DeserializeJsonToObject<Model>("{\"NameCN\":\"康\",\"NameEN\":\"kang\"}"); List<Model> modelList4 = JsonHelper.DeserializeJsonToList<Model>("[{\"NameCN\":\"康\",\"NameEN\":\"kang\"}]");
參考http://www.cnblogs.com/freshman0216/p/4161800.html