加速 JSON 从 C# 到 JSON 的序列化

Speed up JSON Serialization from C# to JSON

我想将我的数据集序列化为JSON

这是我的 ASMX 序列化对象的代码片段

        [WebMethod(EnableSession = true)]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string GetProviderMemberDetail(string jsonString)
        {
            BPMember bp = new BPMember();
            List<BOProvider> listProvider = bp.GetProviderMemberDetail(jsonString);
            return ConvertToSerializedJson(listProvider);
        }

这是 ConvertToSerializedJson 的作用

     public string ConvertToSerializedJson(Object listBO)
        {
            string jsonReturn = String.Empty;
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            serializer.MaxJsonLength = Int32.MaxValue;
            jsonReturn = serializer.Serialize(listBO);
            return jsonReturn;
        }

我要序列化的数据量很大,大约 200.000 个数据。

我试过这个方法,我的浏览器挂了,没有响应,我必须等待 6 分钟才能完成。

第二次尝试,我尝试了Newtonsoft.Json中的序列化函数, 添加了

using Newtonsoft.Json;

并使用

更改序列化器代码
return JsonConvert.SerializeObject(listProvider);

它加快了一点速度,但也使我的浏览器几乎挂起。全部连载完成需要4分钟

问题是,我怎样才能加快序列化速度?我的查询只需要 4 秒就可以完成查询执行并从数据库中检索数据。需要很长时间的是序列化过程 有没有比这更快 运行 的函数?请 post 库或函数的名称和基准,如果我有很好的重大更改,我会更新这个 post。

干杯。

已更新 这就是我爱你们的原因,在你们的建议下,我加快了速度 kind-guys,这里是我 "tweak" 一点点的事情。

正如@Saravanan 所说,我已经减少了我 BO 上所有未使用的(或很少使用的)。这是一个成功的调整。从 300 秒(5 分钟)到 18 秒。

正如@sanguaire 所述,我正在尝试使用快速JSON 库(download here),编译为dll,添加对我的项目的引用,这个速度有点快。

我检索 200.000 个数据所需的时间约为 14 秒到 18 秒。这是我的 17 列基准。

谢谢大家的意见。这么晚才回复很抱歉。我会(如果我的点数达到赞成票标准)在这里对你的两个答案投赞成票。

您可以在 codeproject 上找到一篇关于 JSON 序列化(带有基准)的不同库的好文章。

你可以在这里找到它Article about JSON libraries

再见。

看这个: http://aumcode.github.io/serbench/

图表(速度和有效负载大小):

典型人数/单身,list[100],list[5000]... http://aumcode.github.io/serbench/Specimens_Typical_Person-201507121220/web/overview-charts.htm

纠缠对象图/Conferences/participants/Friends... http://aumcode.github.io/serbench/ObjectGraph_Conference-201507121245/web/overview-charts.htm

网络堆栈批处理... http://aumcode.github.io/serbench/MsgBatching-201507121210/web/overview-charts.htm

我们还有 EDI X12 测试,尚未发布。像这样获取工具和 运行: "sb edi.laconf" 它将在磁盘上生成网络报告