首页 > 编程语言 >C# 一个简陋轻便的Json字符串拼接类

C# 一个简陋轻便的Json字符串拼接类

时间:2023-10-25 10:55:38浏览次数:32  
标签:string val C# json Json 拼接 key sb Append

有的时候我们要以Json格式的形式传递参数,用模型或匿名类传给json库转的话,感觉很浪费,但是自己手动拼的话有比较麻烦,因此封装了一个拼接类,非常简陋

JsonStringBuilder

using System;
using System.Text;

namespace ConsoleApp {
    /// <summary>
    /// 简单的json字符串构建类,只支持单层基础类型字段,不支持数组,对象等字段
    /// </summary>
    public class JsonStringBuilder {
        readonly StringBuilder sb = new StringBuilder("{");
        public void Append(string key, string val, bool hasMark) {
            if (hasMark) {
                sb.Append($"\"{key}\":\"{val}\",");
            } else {
                sb.Append($"\"{key}\":{val},");
            }
        }
        public void Append(string key, string val) {
            Append(key, val, true);
        }
        public void Append(string key, DateTime val) {
            Append(key, val.ToString(), true);
        }
        public void Append<T>(string key, T val) where T : struct {
            Append(key, val.ToString(), false);
        }
        public override string ToString() {
            sb[sb.Length - 1] = '}';
            string json = sb.ToString();
            sb[sb.Length - 1] = ','; //不破坏原字符组,因为可能会继续Append
            return json;
        }
    }
}
View Code

测试代码

        static void Test() {
            int id = 1;
            string name = "张三";
            DateTime birthDate = new DateTime(1989, 6, 8);
            //一些比较简单的json结构没必要使用模型或者匿名类通过json库进行转换
            SpeedTester.Start(5, () => { //一个速度测试函数,用来对比自己拼和封装拼接的运行速度差距
                //但是手动拼比较麻烦,特别是双引号,处理器起来很麻烦,但是性能最好
                string json = "{\"ID\":" + id + ",\"Name\":\"" + name + "\",\"BirthDate\":\"" + birthDate + "\"}";
            }, () => {
                //稍微封装一下,这样就不用关系双引号的问题了,性能也比json库快很多
                JsonStringBuilder jsb = new JsonStringBuilder();
                jsb.Append("ID", id);
                jsb.Append("Name", name);
                jsb.Append("BirthDate", birthDate);
                string json = jsb.ToString();
                Log.Info(json);
            });
        }
View Code

 

标签:string,val,C#,json,Json,拼接,key,sb,Append
From: https://www.cnblogs.com/luludongxu/p/17786633.html

相关文章

  • Window 上 VS Code 无法编译Rust 文件的错误
    Window上VSCode无法编译Rust文件的错误error:linker`link.exe`notfound在CMD中运行以下命令1.rustuptoolchaininstallstable-x86_64-pc-windows-gnu2.rustupdefaultstable-x86_64-pc-windows-gnu参考:https://blog.csdn.net/Libigtong/article/details/131823204......
  • Charles 抓取百度指数及微信指数
    一、百度指数  filter:/api/SearchApi/index//搜索指数 filter:/api/SearchApi/index//搜索指数 找到uniqid,继续filter,获取data(用于解密)  filter: api/SearchApi/index,获取对应指数数据用于解密,页面控制台解密: 解密代码functiondecrypt(t,e......
  • szfpga Lattice高速下载器HW-USBN-2B 常见问题解答
      .产品特点     1).支持windows7,Windows10操作系统,两个操作系统非常稳定不断线。  2).支持JTAG模式,速度快,最高30Mb/s,调试serdescore,不会像hw-usbn-2a出现错误。如这种错误Error:failedtosetcablepor(cable:USBport:EzUSB-0error:-1)  3). ......
  • 电路原理图_PCB_学习02
    这里选择的是一个简单的灯光控制系统。学习视频如下:https://www.bilibili.com/video/BV1pY411j7om/?spm_id_from=333.788&vd_source=516eee863e252e452d8dfe7cb01af532也可以参考立创开源广场的介绍:https://oshwhub.com/course-examples/xun-lian-ying-deng-tiao-kong-zhi-qi......
  • 多格式转pdf——docx 转 pdf
    1publicstaticStringdocxToPdfConverter(StringdocxFilePath,StringpdfFilePath,StringfontPath)throwsException{2FileInputStreamfile=newFileInputStream(docxFilePath);3XWPFDocumentdocxDocument=newXWPFDocument(file)......
  • 多格式转pdf——doc 转 pdf
    publicstaticStringdocToPdfConverter(StringdocFilePath,StringpdfFilePath,StringfontPath)throwsException{FileInputStreamfile=newFileInputStream(docFilePath);HWPFDocumentdocDocument=newHWPFDocument(file);//......
  • CF1854E Games Bundles 题解
    乱搞题设个\(dp[i]\)表示和为\(i\)的子序列个数,那么转移是容易的,\(dp[j]+=dp[j-i]\),然后就判下\(dp[60]+dp[60-i]\)是否大于\(m\),发现这样子搞对于比较大的数可能达不到\(m\)的限制,因为这样子转移,默认的是一个数只选一次,但是我们可以重复选,这启发我们需要设定一个值......
  • CRM系统如何进行另类数据管理?
     “另类数据”是近些年比较火的词,得益于通信技术、数据基础设施的发展,以前无法留存的数据得以被大规模的存储和积累,并逐步在宏观及微观层面开始应用。另类数据相比传统数据更具实时性,前景更被看好。那么,CRM系统如何进行另类数据管理?一手“信息”比拼 提高用户满意度不管在......
  • Lattice高速下载器HW-USBN-2B 如何申请 license
     如果用的芯片不是停产老旧芯片,Diamondprogrammer是不需要license绑定支持的。但是有些需要编程老旧的芯片。需要安装Diamondprogrammerstand-alone版本。另外需要单独的免费license,这样才能启用老旧芯片烧录功能。如果没有网站账户,请在https://www.latticesemi.c......
  • CRM系统在销售管理中的作用
     CRM系统在销售管理中发挥着重要作用,而很多销售人员并不喜欢用销售管理系统,甚至认为这是监管工具,对自己不信任。这是因为他们并没有理解CRM系统在销售管理中的作用。客户资料库企业负责人担心销售人员会将客户带跑,这样的理解是不对的,客户通常都是对企业品牌产生信任才下一步......