简单,是因为只有一个类
轻量,是因为整个类代码只有300行
灵活,是因为扩展方式只需 要继承重写某个方法即可
首先我将这个类称之为JsonBuilder,我希望它以StringBuilder的方式 来实现Json字符串的转换
public class JsonBuilder { protected StringBuilder Buff = new StringBuilder(4096);//字符缓冲区 public string ToJsonString(object obj) { ....... return Buff.ToString(); } ....... }
然后我为希望为每一个基础类型单独完成一个方法,并且方法可以被重写
protected virtual void AppendByte(Byte value) protected virtual void AppendDecimal(Decimal value) protected virtual void AppendInt16(Int16 value) protected virtual void AppendInt32(Int32 value) protected virtual void AppendInt64(Int64 value) protected virtual void AppendSByte(SByte value) protected virtual void AppendUInt16(UInt16 value) protected virtual void AppendUInt32(UInt32 value) protected virtual void AppendUInt64(UInt64 value) protected virtual void AppendBoolean(Boolean value) protected virtual void AppendChar(Char value) protected virtual void AppendString(String value) protected virtual void AppendDateTime(DateTime value) protected virtual void AppendGuid(Guid value) protected virtual void AppendDouble(Double value) protected virtual void AppendSingle(Single value) protected virtual void AppendEnum(Enum value)
为了使子类重写时更方便,我将数字类型合 并为一个
protected virtual void AppendNumber(IConvertible number)
但仍然保 留原有方法,只是原有方法直接调用AppendNumber,就像这样
protected virtual void AppendByte(Byte value) { AppendNumber(value); } protected virtual void AppendDecimal(Decimal value) { AppendNumber(value); } protected virtual void AppendInt16(Int16 value) { AppendNumber(value); } protected virtual void AppendInt32(Int32 value) { AppendNumber(value); } protected virtual void AppendInt64(Int64 value) { AppendNumber(value); } protected virtual void AppendSByte(SByte value) { AppendNumber(value); } protected virtual void AppendUInt16(UInt16 value) { AppendNumber(value); } protected virtual void AppendUInt32(UInt32 value) { AppendNumber(value); } protected virtual void AppendUInt64(UInt64 value) { AppendNumber(value); } protected virtual void AppendDouble(Double value) { AppendNumber(value); } protected virtual void AppendSingle(Single value) { AppendNumber(value); }
这样的好 处是我可以在子类中灵活的选择重写全部的数字类型,还是只重写某种特定类型
然后接着,我需要 完成一些已知类型的转换方法,比如数组,集合,字典,数据表等等
protected virtual void AppendArray(IEnumerable array)//数组,集合 protected virtual void AppendJson(IDictionary dict)//字典 protected virtual void AppendDataSet(DataSet dataset)//数据表集 protected virtual void AppendDataTable(DataTable table)//单表 protected virtual void AppendDataView(DataView view)//表视图
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索方法
, 类型
, void*
, virtual
, value
, protected
, virtual c#
, 在Virtual
, datatable转换为json
, void
, json字符串转字典
, 集合转字符串
, table转Json
转Int类型
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。