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

有的时候我们要以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

 

posted @ 2023-10-25 10:50  WmW  阅读(124)  评论(0编辑  收藏  举报