很多人告诉你怎么用,但是却不会告诉你用什么好。不知道在进行序列化和反序列化Json时用那个好,因为有太多选择,如.NET Framework下可以选DataContractJsonSerializerJavaScriptSerializerNewtonsoft.Json,但是JavaScriptSerializer在.net core下已经没有了,那么大家还有两种选择DataContractJsonSerializerNewtonsoft.Json,因为这两个都有人用,所以我做了完整的对象转换demo进行了测试,这里我不仅和大家讲如何使用,并且还把我自己写的参与测试并告诉各位怎么测试的。

为了节约开发时间,我们把解决方案收入到一个个demo中,方便以后即拿即用。而且这些demo有博客文档支持,帮助任何人非常容易上手开发跨平台的.net core。随着时间的推移,我们的demo库会日益强大请及时收藏GitHub

好了在讲序列化及反序列化之前先把我们的测试结果分享给大家,十万数据测速比较告诉你为何用Newtonsoft。

一、首先在Common公用项目中引用Newtonsoft的类库

Install-Package Newtonsoft.Json -Version -beta2

二、在Common公用项目中添加CommonHelper

#region model<->json(对象和json互转)
        #region DataContractJsonSerializer
        public static string SerializeDataContractJson<T>(T obj)
        {
            DataContractJsonSerializer json = new DataContractJsonSerializer(obj.GetType());
            using (MemoryStream stream = new MemoryStream())
            {
                json.WriteObject(stream, obj);
                string szJson = Encoding.UTF8.GetString(stream.ToArray());
                return szJson;
            }
        }
        public static T DeserializeDataContractJson<T>(string szJson)
        {
            T obj = Activator.CreateInstance<T>();
            using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
                return (T)serializer.ReadObject(ms);
            }
        }
        #endregion

        #region Newtonsoft
        static public string SerializeJSON<T>(T data)
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(data);
        }
        static public T DeserializeJSON<T>(string json)
        {
            return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(json);
        }
        #endregion
        #endregion

        #region datatable<->json(datatable和json互转)
        public static string SerializeDataTableToJSON(DataTable dt)
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(dt);
        }
        public static DataTable SerializeJSONToDataTable(string json)
        {
            return Newtonsoft.Json.JsonConvert.DeserializeObject<DataTable>(json);
        }
        #region 自己写datatable转json用于测试速度对比下
        public static string MyDataTableToJson(DataTable dt)
        {
            StringBuilder JsonString = new StringBuilder();
            )
            {
                JsonString.Append("{ ");
                JsonString.Append("\"TableInfo\":[ ");
                ; i < dt.Rows.Count; i++)
                {
                    JsonString.Append("{ ");
                    ; j < dt.Columns.Count; j++)
                    {
                        )
                        {
                            JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\",");
                        }
                        )
                        {
                            JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\"");
                        }
                    }
                    )
                    {
                        JsonString.Append("} ");
                    }
                    else
                    {
                        JsonString.Append("}, ");
                    }
                }
                JsonString.Append("]}");
                return JsonString.ToString();
            }
            else
            {
                return null;
            }
        }
        #endregion
        #endregion

三、控制器添加Json处理相应方法(我这里整合所有到了HomeController下的Json中了,你们不需要计时,用的时候只需要调用CommonHelper的相关方法即可)

public IActionResult Json()
        {
            List<Article> articleList = new List<Article>();
            ; x < ; x++)
            {
                Article article = new Article();
                article.Context = "内容:" + x;
                article.Id = x + ;
                article.CreateTime = DateTime.Now;
                article.Title = "标题:" + x;
                articleList.Add(article);
            }

            #region 单个对象与json互转
            Article articletest = new Article();
            articletest.Context = "内容";
            articletest.Id = ;
            articletest.CreateTime = DateTime.Now;
            articletest.Title = "标题";
            string json11 = CommonHelper.SerializeDataContractJson(articletest);
            string json12 = CommonHelper.SerializeJSON(articletest);
            Article article1 = CommonHelper.DeserializeDataContractJson<Article>(json11);
            Article article2 = CommonHelper.DeserializeJSON<Article>(json12);
            #endregion

            #region 记录10万对象集合与json互转用时比较
            //SerializeDataContractJson 10万对象转json
            System.Diagnostics.Stopwatch watch1 = new System.Diagnostics.Stopwatch();
            watch1.Start();  //开始监视代码运行时间
            string json1 = CommonHelper.SerializeDataContractJson(articleList);
            TimeSpan timespan1 = watch1.Elapsed;  //获取当前实例测量得出的总时间
            watch1.Stop();  //停止监视
            ViewBag.t1= timespan1.TotalSeconds;

            //Newtonsoft 10万对象转json
            System.Diagnostics.Stopwatch watch2 = new System.Diagnostics.Stopwatch();
            watch2.Start();
            string json2 = CommonHelper.SerializeJSON(articleList);
            TimeSpan timespan2 = watch2.Elapsed;
            watch2.Stop();
            ViewBag.t2 = timespan2.TotalSeconds;

            //SerializeDataContractJson 10万json转对象
            System.Diagnostics.Stopwatch watch3 = new System.Diagnostics.Stopwatch();
            watch3.Start();
            List<Article> list1 = CommonHelper.DeserializeDataContractJson<List<Article>>(json1);
            TimeSpan timespan3 = watch3.Elapsed;
            watch3.Stop();
            ViewBag.t3 = timespan3.TotalSeconds;

            //Newtonsoft 10万json转对象
            System.Diagnostics.Stopwatch watch4 = new System.Diagnostics.Stopwatch();
            watch4.Start();
            List<Article> list2 = CommonHelper.DeserializeJSON<List<Article>>(json2);
            TimeSpan timespan4 = watch4.Elapsed;
            watch4.Stop();
            ViewBag.t4 = timespan4.TotalSeconds;

            #endregion

            #region 记录10万datatable与json互转用时比较
            DataTable tblDatas = new DataTable("Datas");
            DataColumn dc = null;
            dc = tblDatas.Columns.Add("ID", Type.GetType("System.Int32"));
            dc.AutoIncrement = true;//自动增加
            dc.AutoIncrementSeed = ;//起始为1
            dc.AutoIncrementStep = ;//步长为1
            dc.AllowDBNull = false;//

            dc = tblDatas.Columns.Add("Product", Type.GetType("System.String"));
            dc = tblDatas.Columns.Add("Version", Type.GetType("System.String"));
            dc = tblDatas.Columns.Add("Description", Type.GetType("System.String"));
            ; x < ; x++)
            {
                DataRow newRow = tblDatas.NewRow();
                newRow["Product"] = "西游记" + x;
                newRow["Version"] = "" + x;
                newRow["Description"] = x;
                tblDatas.Rows.Add(newRow);
            }

            //Newtonsoft 10万DataTable转json
            System.Diagnostics.Stopwatch watch5 = new System.Diagnostics.Stopwatch();
            watch5.Start();
            string json5 = CommonHelper.SerializeDataTableToJSON(tblDatas);
            TimeSpan timespan5 = watch5.Elapsed;
            watch5.Stop();
            ViewBag.t5 = timespan5.TotalSeconds;

            //Newtonsoft 10万json转DataTable
            System.Diagnostics.Stopwatch watch6 = new System.Diagnostics.Stopwatch();
            watch6.Start();
            DataTable dataTable = CommonHelper.SerializeJSONToDataTable(json5);
            TimeSpan timespan6 = watch6.Elapsed;
            watch6.Stop();
            ViewBag.t6 = timespan6.TotalSeconds;

            //自己写的  10万DataTable转json
            System.Diagnostics.Stopwatch watch7 = new System.Diagnostics.Stopwatch();
            watch7.Start();
            string json7 = CommonHelper.MyDataTableToJson(tblDatas);
            TimeSpan timespan7 = watch7.Elapsed;
            watch7.Stop();
            ViewBag.t7 = timespan7.TotalSeconds;
            #endregion

            return View();
        }

四、前端设计(这里也没啥设计了,只是做了展示,代码我还是贴出来吧)

    <div style="width:80%;margin:auto;text-align:center;">
        <div class="cover" style="border: 1px solid #D6D6D6;padding: 5px;">
            <h2>10万对象与json互转</h2>
            <span>SerializeDataContractJson:对象集合转json(@ViewBag.t1 秒),json转对象集合(@ViewBag.t3 秒)</span><br />
            <span>Newtonsoft:对象集合转json(@ViewBag.t2 秒),json转对象集合(@ViewBag.t4 秒)</span>
        </div>
        <div class="cover" style="border: 1px solid #D6D6D6;padding: 5px;">
            <h2>10万datatable与json互转</h2>
            <span>Newtonsoft:datatable转json(@ViewBag.t5 秒),json转datatable(@ViewBag.t6 秒)</span><br />
            <span>自己码:datatable转json(@ViewBag.t7 秒)</span>
        </div>
    </div>

五、那么看下效果吧。

开源地址 动动小手,点个推荐吧!

注意:我们机遇屋该项目将长期为大家提供asp.net core各种好用demo,旨在帮助.net开发者提升竞争力和开发速度,建议尽早收藏该模板集合项目

.net core 对象序列化为Json及Json反序列化关于DataContractJsonSerializer和Newtonsoft使用的完整案例,源码已更新至开源模板的更多相关文章

  1. 建议收藏备用:.net core使用QRCoder生成普通二维码和带Logo的二维码详细使用教程,源码已更新至开源模板

    随着互联网越来越生活化,二维码的使用越来越普遍,不论是扫码支付还是扫码关注引流,似乎我们总是离不开二维码,那么很多需要推广的文章或社区想要自己的二维码,那么你是不是需要在网站直接提供给用户呢?很多开发 ...

  2. 建议收藏:.net core 使用导入导出Excel详细案例,精心整理源码已更新至开源模板

    还记得刚曾经因为导入导出不会做而发愁的自己吗?我见过自己前同事因为一个导出改了好几天,然后我们发现虽然有开源的库但是用起来却不得心应手,主要是因为百度使用方案的时候很多方案并不能解决问题. 尤其是尝试 ...

  3. 类对象序列化为json串,json串反序列化为类对象

    1.类对象序列化为json串: 方法一: class P(object): def __init__(self,name,age,sex): self.name=name self.age=age s ...

  4. JS对象序列化为JSON对象的方法

    var $ = $ || {}; /** * 将JS对象序列化为JSON字符串 * @param {Mixed} o The variable to decode * @return {String} ...

  5. 匿名对象序列化为XML

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...

  6. JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象

    JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.说白了就是能够直接将一个C#对象传送到前台页面成为javascript对 ...

  7. JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象 。

    JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.说白了就是能够直接将一个C#对象传送到前台页面成为javascript对 ...

  8. .NET Core 对象到字节数组的序列化和反序列化

    .NET Core中利用MemoryStream和BinaryFormatter可以实现对象到字节数组的序列化和反序列化: 定义ObjectSerializer类,实现对象到字节数组的序列化和反序列化 ...

  9. Python: 自定义类对象序列化为Json串

    之前已经实现了Python: Json串反序列化为自定义类对象,这次来实现了Json的序列化. 测试代码和结果如下: import Json.JsonTool class Score: math = ...

随机推荐

  1. 【CJOJ】为了博多

    Description 做了个噩梦,梦见我的 n 把刀到60级会二次变身,变成一个 对推6图有xi点贡献,刷大阪城有yi点贡献 的刀,于是要把刀分成两队一队刷大阪城另一队推6图 . 但是有m对兄弟刀在 ...

  2. 安装Elasticsearch可视化插件

    背景 项目中使用Elasticsearch , 最开始14年使用的时候需要es自己安装插件才能通过web页面查看数据情况,目前新版本的ES安装插件很费劲,通过搜索发现目前谷歌浏览器就有这个插件,这里简 ...

  3. 初识域渗透利器Empire

    Empire 是一款类似Metasploit 的渗透测试框架,基于python 编写,Empire是一个纯粹的PowerShell 后开发代理,建立在密码安全通信和灵活的架构上.Empire 实现了无 ...

  4. 概念理解:boost::asio::io_service

    IO模型 io_service对象是asio框架中的调度器,所有异步io事件都是通过它来分发处理的(io对象的构造函数中都需要传入一个io_service对象). asio::io_service i ...

  5. pytest7-多个fixtures执行顺序

    举例: import pytest order = [] @pytest.fixture(scope='session') def s1(): order.append("s1") ...

  6. 将 so|JNI|NDK 之间的关系说明白

    最近在了解公司历史的发展,发现了公司产品中几乎都要使用 so 文件,不禁好奇这个 so 到底是何方神圣. so 文件 so 是 shared object 的缩写,见名思义就是共享的对象,机器可以直接 ...

  7. 百万年薪python之路 -- socket()模块的用法

    socket()模块的用法: import socket socket.socket(socket_family,socket_type,protocal=0) socket_family 可以是 A ...

  8. Spring框架 --- 深入

    1.Spring IOC IOC技术: 控制反转,也叫(依赖注入) 控制反转:Bean的生命周期不受你控制,而是交给Spring容器管理. Spring框架如何利用IOC ?:        实现了控 ...

  9. 关于微信oauth登录的坑

    这是实习公司里微信公众号的一个小项目,用的是ssm.问题是获取用户openid为空. 分析下步骤 首先用户点击微信公众号按钮 访问微信服务器获取code 跳转到项目url 拿code访问微信服务器,获 ...

  10. (七)javac编译

    文章目录 1.基本格式 2.目标路径 2.1 缺省项 2.2 指定路径 2.2.1 全路径 2.2.2 相对路径 3.源文件 3.1 无第三方库 3.1.1 基本方法 3.1.2 添加目录 3.1.3 ...