当前位置: 首页 > news >正文

用了wordpress的电商网站官方发布小程序开发小程序

用了wordpress的电商网站,官方发布小程序开发小程序,遂昌建设局网站,无锡大型互联网公司一#xff1a;背景1. 讲故事在开始本文之前#xff0c;真的好想做个问卷调查#xff0c;到底有多少人和我一样#xff0c;对 JsonConvert 的认识只局限在 SerializeObject 和 DeserializeObject 这两个方法上(┬#xff3f;┬), 这样我也好结伴同行#xff0c;不再孤单落… 一背景1. 讲故事在开始本文之前真的好想做个问卷调查到底有多少人和我一样对 JsonConvert 的认识只局限在 SerializeObject 和 DeserializeObject 这两个方法上(┬┬), 这样我也好结伴同行不再孤单落魄????????????或许是这两个方法基本上能够解决工作中 80% 的场景对于我来说确实是这样但随着编码的延续终究还是会遇到那剩下的 20% 所以呀。。。我的场景是这样的前段时间写业务代码的时候我有一个自定义的客户算法类型的Model这个Model中有这种算法类型下的客户群以及Report统计信息还用了 HashSet 记录了该类型下的 CustomerID集合为了方便讲述我把Model简化如下class CustomerAlgorithmModel{public string DisplayName { get; set; }public int CustomerType { get; set; }public ReprotModel Report { get; set; }public HashSetint CustomerIDHash { get; set; }}class ReprotModel{public int TotalCustomerCount { get; set; }public int TotalTradeCount { get; set; }} 那有意思的就来了我个人是有记日志的癖好就想着以后不会出现死无对证的情况然后就理所当然的使用 JsonConvert.SerializeObject, 这一下就出问题了日志送入到了 ElasticSearch 然后通过 Kibana 查不出来为啥呢看完上面的 Model 我想你也猜到了原因json体太大了哈好歹 CustomerIDHash 中也有几十万个撒这一下全导出成json了这 size 还能小吗要不我写段代码看一看。static void Main(string[] args){var algorithModel new CustomerAlgorithmModel(){CustomerType 1,DisplayName ????????,Report new ReprotModel(){TotalCustomerCount 1000,TotalTradeCount 50},CustomerIDHash new HashSetint(Enumerable.Range(1, 500000))};var json JsonConvert.SerializeObject(algorithModel);File.WriteAllText(1.txt, json, Encoding.UTF8);Console.WriteLine(写入完成);} 可以看到仅一个json就 3.3M这样的记录多来几打后在 kibana 上一检索浏览器就卡的要死其实 CustomerIDHash 这个字段对我来说是可有可无的就算存下来了也没啥大用所以需求就来了如何屏蔽掉 CustomerIDHash。二寻求解决方案1. 使用 JsonIgnore有问题就网上搜啊这一搜马上就有人告诉你可以使用 JsonIgnoreAttribute 忽略特性加好这个特性后继续跑一下程序。[Newtonsoft.Json.JsonIgnore]public HashSetint CustomerIDHash { get; set; } 太好了终于搞定了但是静下心来想一想总感觉心里有那么一点不舒服为什么这么说一旦你给这个 CustomerIDHash 套上了 JsonIgnore 这就意味着它在 JsonConvet 的世界中从此消失也不管是谁在使用这个Model 但这并不是我的初衷我的初衷仅仅是为了在记录日志的时候踢掉 CustomerIDHash可千万不要影响在其他场景下的使用哈现在这种做法就会给自己给别人挖坑埋下了不可预知的bug我想你应该明白我的意思还得继续寻找下一个方案。2. 使用自定义的 JsonConverter真的Newtonsoft 太强大了我都想写一个专题好好弥补弥补我的知识盲区其实在这个场景中不就是想把 HashSetint 给屏蔽掉嘛Newtonsoft 中专门提供了一个针对特定类型的自定义处理类接下来我就写一段/// summary/// 自定义一个 针对 HashSetint 的转换类/// /summarypublic class HashSetConverter : Newtonsoft.Json.JsonConverterHashSetint{public override HashSetint ReadJson(JsonReader reader, Type objectType, HashSetint existingValue, bool hasExistingValue, JsonSerializer serializer){return existingValue;}public override void WriteJson(JsonWriter writer, HashSetint value, JsonSerializer serializer){writer.WriteNull();}} 就是这么简单然后就可以在 SerializeObject 的时候指定下自定义的 HashSetConverter 即可然后再将程序跑起来看一下。var json JsonConvert.SerializeObject(algorithModel, Formatting.Indented, new HashSetConverter()); 从图中看貌似也是解决了但我突然发现自己要钻牛角尖了如果我的实体中又来了一个顶级优质客户群的 TopNCustomerIDHash但因为这个CustomerID 比较少我希望在 Json 中能保留下来然后就是踢掉的那个 CustomerIDHash 我要保留 CustomerIDHash.Length哈哈搞事情哈那接下来怎么解决呢修改 Model 实体class CustomerAlgorithmModel{public HashSetint CustomerIDHash { get; set; }// topN 优质客户群public HashSetint TopNCustomerIDHash { get; set; }} HashSetConverter 增加逻辑鉴别是否为保留字段public override void WriteJson(JsonWriter writer, HashSetint value, JsonSerializer serializer){if (writer.Path TopNCustomerIDHash){writer.WriteStartArray();foreach (var item in value){writer.WriteValue(item);}writer.WriteEndArray();}else{writer.WriteValue(value.Count);}} 最后给 TopNCustomerIDHash 赋值var algorithModel new CustomerAlgorithmModel(){CustomerType 1,DisplayName ????????,Report new ReprotModel(){TotalCustomerCount 1000,TotalTradeCount 50},CustomerIDHash new HashSetint(Enumerable.Range(1, 500000)),TopNCustomerIDHash new HashSetint(Enumerable.Range(1, 10)),}; 三块都搞定后就可以把程序跑起来了如下图貌似钻牛角尖的问题是解决了既然钻牛角尖肯定要各种鄙视比如这里的 ReportModel 我是不需要的CustomerType 我也是不需要的我仅仅需要看一下 DisplayName 和 TotalCustomerCount 这两个字段就可以了 那这个要怎么解决呢3. 使用 匿名类型确实很多时候记日志就是为了跟踪 Model 中你特别关心的那几个字段所以掺杂了多余的字段确实也是没必要的这里可以用匿名来解决我就来写一段代码var json JsonConvert.SerializeObject(new{algorithModel.DisplayName,algorithModel.Report.TotalCustomerCount}, Formatting.Indented); 三总结虽然阻击了几个回合但同时也发现了 Newtonsoft 中还有特别多的未挖掘功能真的需要好好研究研究源码已下好接下来准备做个系列来解剖一下值得一提的是 .Net中已自带了 System.Text.Json.JsonSerializer 类目前来看功能还不算太丰富简单用用还是可以的本篇就说到这里希望对您有帮助。
http://www.sadfv.cn/news/244303/

相关文章:

  • 邢台网站建设开发深圳设计公司上市成功有几家
  • 湖北手机网站建设怎样建立一个主题网站
  • 湛江建设培训学校网站建设额度哪里看
  • 软文新闻发布网站流行的网站开发技术
  • 服务器建设一个自己的网站wordpress api 中文文档
  • 工信部 网站 备案网站栏目定位
  • 河北网站seo优化室内装修工人培训班
  • 专业企业网站开发联系电话定制型网站制作明细报价表
  • 网站的域名和空间wordpress 文章标题样式
  • 网站建设与运营课程总结沈阳网站建设024w
  • 家用电脑如何做网站服务器互展科技网站建设
  • 网站的首页怎么做的ps教程自学网官网
  • 慕枫网站建设中国十大上市装修公司
  • 德阳网站建设推广园林景观中企动力提供网站建设
  • 做网站的空间和服务器jsp网站建设教程
  • 企业还做网站吗wordpress更改图片链接
  • 企业网站框架图小程序是怎么开发的
  • 工程建设标准网官方网站沙市网站建设
  • 网站建设圣诞素材淘宝客怎么样做自己的网站
  • 集宁建设局网站专门做水果的网站
  • 建立网站的软件祁阳网页定制
  • asp 网站源码怎样做团购网站
  • 企业网站排名软件度智能优化品牌网站建设蔻大蝌蚪
  • 个人可以建设网站吗不备案jsp制作网站
  • ps如何做网站tinypng图片压缩网站
  • 上海网站开发公司网站栏目是什么
  • 搭建一个商城网站上海做原创网站
  • 百度网盘做网站可信赖的网站建设案例
  • 陶瓷马赛克 网站建设 中企动力优秀手机网站设计
  • wordpress插件整站搬家网站seo顾问