1. 程式人生 > >Newtonsoft.Json(Json.Net)學習筆記

Newtonsoft.Json(Json.Net)學習筆記

今天學習了JSON序列化和反序列化的一個方法,特此記一下,順便吐槽一下,新建的model有189個欄位,我還給加了註釋。。。。

Newtonsoft.Json,一款.NET中開源的Json序列化和反序列化類庫

首先引用一個dll,Newtonsoft.Json.dll

將Json序列化和反序列化的簡單封裝為jsonhelper類

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;
        }
    }
自己建的model類,欄位太多,就不全部貼上了
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