public enum DataStyle
{
BOOL = 1,//逻辑值(true 或 false)
INT = 2,//整数
DOUBLE = 3,//浮点数
STR = 4,//字符串
DATE = 5,//
ARRAY = 6,//数组(MakeJson[])
DIC = 7,//嵌套一个json(MakeJson)
NULL = 8,//
NO = 9
}
public class MakeJson
{
string error = null;
DataStyle style = DataStyle.NO;
string str = "";
bool bValue = false;
int num1 = 0;
double num2 = 0;
MakeJson[] array = null;
public Dictionary<string, MakeJson> dic = null;
private MakeJson(bool val)
{
style = DataStyle.BOOL;
bValue = val;
}
private MakeJson(int num)
{
style = DataStyle.INT;
num1 = num;
}
private MakeJson(double num)
{
style = DataStyle.DOUBLE;
num2 = num;
}
private MakeJson(string str)
{
if (str == null)
style = DataStyle.NULL;
else
{
style = DataStyle.STR;
this.str = str;
}
}
public MakeJson()
{
style = DataStyle.DIC;
dic = new Dictionary<string, MakeJson>();
}
public void add(string key, object val, DataStyle style)
{
try
{
switch(style)
{
case DataStyle.BOOL:
dic.Add(key, new MakeJson((bool)val));
break;
case DataStyle.STR:
case DataStyle.DATE:
{
string val2 = val.ToString();
if(val2.Contains("\""))
{
for(int i = val2.Length - 1; i >=0; i--)
{
if ((val2[i] == '\"' && i == 0) || (val2[i] == '\"' && i > 0 && val2[i - 1] != '\\'))
error = "添加了不符合要求的值:" + val2;
}
}
MakeJson j = new MakeJson(val2.ToString());
dic.Add(key, j);
break;
}
case DataStyle.INT:
dic.Add(key, new MakeJson((int)val));
break;
case DataStyle.DOUBLE:
dic.Add(key, new MakeJson((double)val));
break;
case DataStyle.ARRAY:
{
MakeJson j = new MakeJson();
j.array = (MakeJson[])val;
j.style = style;
dic.Add(key, j);
break;
}
case DataStyle.DIC:
dic.Add(key, (MakeJson)val);
break;
case DataStyle.NULL:
dic.Add(key, new MakeJson(null));
break;
default:
break;
}
}
catch(Exception e)
{
error = "josn添加节点异常:" + e.ToString();
}
}
public override string ToString()
{
try
{
if (error != null)
return error;
else if (style == DataStyle.BOOL)
{
return bValue ? "true" : "false";
}
else if (style == DataStyle.DATE)
{
return str;
}
else if (style == DataStyle.STR)
{
return "\"" + str + "\"";
}
else if (style == DataStyle.INT)
{
return num1.ToString();
}
else if (style == DataStyle.DOUBLE)
{
return num2.ToString();
}
else if (style == DataStyle.ARRAY)
{
StringBuilder sb = new StringBuilder();
sb.Append("[");
for (int i = 0; i < array.Length; i++)
{
sb.Append(array[i].ToString());
if (i != array.Length - 1)
sb.Append(",");
}
sb.Append("]");
return sb.ToString();
}
else if (style == DataStyle.DIC)
{
StringBuilder sb = new StringBuilder();
int index = 1;
sb.Append("{");
foreach (KeyValuePair<string, MakeJson> kv in dic)
{
sb.Append("\"" + kv.Key + "\":");
sb.Append(kv.Value.ToString());
if (index != dic.Count)
sb.Append(",");
index++;
}
sb.Append("}");
return sb.ToString();
}
else if (style == DataStyle.NULL)
return "null";
else
return "";
}
catch(Exception e)
{
error = "生成json字符串异常:" + e.ToString();
return "";
}
}
}
示例:
MakeJson mj1 = new MakeJson();
mj1.add("111", "11\\\"11", htx_tools.DataStyle.STR);
MakeJson mj2 = new MakeJson();
mj2.add("bool", true, htx_tools.DataStyle.BOOL);
mj2.add("int", 12, htx_tools.DataStyle.INT);
MakeJson mj3 = new MakeJson();
mj3.add("mj1", mj1, DataStyle.DIC);
mj3.add("mj2", mj2, DataStyle.DIC);
string json = mj3.ToString();
结果:
{"mj1":{"111":"11\"11"},"mj2":{"bool":true,"int":12}}
如有错误,敬请留言