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