当前位置: 程晨旭的博客 > 学习笔记>正文

Newtonsoft.Json 简单实用方法 C# Json序列化和反序列化解析操作工具类

Newtonsoft.Json是一个功能多,效率高的Json工具

官方网站:https://www.newtonsoft.com/json

GitHun:https://github.com/JamesNK/Newtonsoft.Json


安装一:

工具-库程序包管理器-库程序包管理器控制台,输入:

Install-Package Newtonsoft.Json

安装二:

项目-右键引用-管理NuGet程序包 可以联机搜索或者搜索已经安装的程序集引入即可


安装三:直接引入DLL文件, 下载地址:

Newtonsoft.Json.rar

版本6.0.0.0


对象的序列化和反序列化:


首先定义一个实体类,只有简单的几个属性

    /// <summary>
    /// 新闻类
    /// </summary>
    public class NewArticle
    {
        //ID
        public int Id { get; set; }
        //标题
        public string Title { get; set; }
        //内容
        public string Content { get; set; }
        //新闻所属分类
        public ArticleClass ArticleClass { get; set; }


    }

    public class ArticleClass
    {
        //分类ID
        public int Cid { get; set; }
        //分类名称
        public string CName { get; set; }
    }


序列化和反序列化演示:

        static void Main(string[] args)
        {
            //实例化一个NewArticle对象
            NewArticle na = new NewArticle
            {
                Id = 1,
                Title = "Newtonsoft.Json的用法简介",
                Content = "Newtonsoft.Json的用法简介的详细文章内容",
                ArticleClass = new ArticleClass { 
                    Cid=1,
                    CName="技术分享"
                }
            };

            //序列化和反序列化:这里主要利用了Newtonsoft.Json.JsonConvert类的SerializeObject(object o)和DeserializeObject<T>(string jsonString)方法

            //序列化为Json字符串
            string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(na);
            Console.WriteLine("序列化对象");
            Console.WriteLine(jsonString);
            //输出:{\"Id\":1,\"Title\":\"Newtonsoft.Json的用法简介\",\"Content\":\"Newtonsoft.Json的用法简介的详细文章内容\",\"ArticleClass\":{\"Cid\":1,\"CName\":\"技术分享\"}}

            Console.WriteLine("反序列化对象");

            //反序列化:这里利用了泛型方法
            NewArticle na2 = Newtonsoft.Json.JsonConvert.DeserializeObject<NewArticle>(jsonString);

            Console.WriteLine("ID:{0}\nTitle:{1}\nContent:{2}",na2.Id,na.Title,na2.Content);

            Console.ReadKey();

        }

匿名对象的序列化和反序列化

有时候我们仅想使用Json传递一组临时数据给Js进行处理,后台不需要对数据再反序列化,可以利用匿名对象.

删除掉上面代码的Article和ArticleClass类 现在Main方法改为:

        static void Main(string[] args)
        {
           
            var  na = new
            {
                Id = 1,
                Title = "Newtonsoft.Json的用法简介",
                Content = "Newtonsoft.Json的用法简介的详细文章内容",
                ArticleClass = new {
                    Cid = 1,
                    CName = "技术分享"
                }
            };


            //序列化和反序列化:这里主要利用了Newtonsoft.Json.JsonConvert类的SerializeObject(object o)和DeserializeObject<T>(string jsonString)方法

            //序列化为Json字符串
            string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(na);
            Console.WriteLine("序列化对象");
            Console.WriteLine(jsonString);
            //输出:{\"Id\":1,\"Title\":\"Newtonsoft.Json的用法简介\",\"Content\":\"Newtonsoft.Json的用法简介的详细文章内容\",\"ArticleClass\":{\"Cid\":1,\"CName\":\"技术分享\"}}

            Console.WriteLine("反序列化对象");

            //反序列化:这里利用了非泛型方法 因为匿名类没有固定类型
            var na2 = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString);

            //匿名类取值需要利用反射,所以需要反序列化的对象一般都不要用匿名对象
            Console.ReadKey();

        }

当运行到最后的时候,可以查看Na2的值:

Screen Shot 2018-03-12 at 12.28.41 PM.png

说明已经反序列化成功了.对于匿名对象想取得属性的话需要用到反射,所以需要反序列化的类一般要实际定义,不要使用匿名对象.

本文为博主原创,转载请保留出处:
http://www.chengchenxu.com/Article/26/Newtonsoft

‹‹ 上一篇 下一篇 ››

评论列表:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。