Newtonsoft.Json(Json.Net)学习笔记

来源:互联网 发布:死而后已不亦远乎翻译 编辑:程序博客网 时间:2024/06/06 07:26

今天学习了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

原创粉丝点击