本文讲述了C# json转hashtable!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:
前端使用json很方便,传到后端有时需要hashtable,所以记录以下代码
/// <summary>
/// 处理json
/// </summary>
/// <param name="json">json字符串</param>
/// <returns></returns>
private Hashtable JsonToHashTable(string json)
{
Hashtable ht = new Hashtable();
string jsonStr = json.Substring(1, json.Length - 2);//去掉首尾{}
jsonStr = jsonStr.Replace("\"", "").Replace("'", "").Replace(" ", "");//去掉所有" '
string[] jsonArr = SplitJson(jsonStr,",");
string str = null;
for (int i = 0; i < jsonArr.Length; i++)
{
str = jsonArr[i];
string[] arr = SplitJson(str,":");
//判断是否包含[ ]
if (arr[1].Contains("["))//做数组处理
{
List<Hashtable> subHtl = JsonToHashTableList(arr[1]);
ht.Add(arr[0], subHtl);
}
else if (arr[1].Contains("{"))//做json处理
{
Hashtable subHt = JsonToHashTable(arr[1]);
ht.Add(arr[0], subHt);
}
else
{
ht.Add(arr[0], arr[1]);
}
}
return ht;
}
/// <summary>
/// 处理json数组
/// </summary>
/// <param name="json">json数组字符串</param>
/// <returns></returns>
private List<Hashtable> JsonToHashTableList(string json)
{
List<Hashtable> htl = new List<Hashtable>();
string jsonStr = json.Substring(1, json.Length - 2);//去掉首尾[]
string[] jsonArr = SplitJson(jsonStr,",");
for (int j = 0; j < jsonArr.Length; j++)
{
Hashtable ht = JsonToHashTable(jsonArr[j]);
htl.Add(ht);
}
return htl;
}
/// <summary>
/// 依据传入的符号分割字符串
/// </summary>
/// <param name="json"></param>
/// <param name="code">冒号则只分割一次,逗号无视[],{}中的逗号分割</param>
/// <returns></returns>
private string[] SplitJson(string json,string code)
{
List<string> res = new List<string>();
if (code == ",")
{
//无视[],{}中的逗号分割
string pattern = @"(?<=\{|\[.*),(?=.*\}|\])";
string result = Regex.Replace(json, pattern, "####");//把[ ]和{ }中的逗号排除
string[] arr = result.Split(',');
string temp = null;
for (int i = 0; i < arr.Length; i++)
{
temp = arr[i].Replace("####", ",");//恢复[ ]和{ }中的逗号
res.Add(temp);
}
}
else if(code == ":")
{
//冒号则只分割一次
int index = json.IndexOf(code);
res.Add(json.Substring(0, index));
res.Add(json.Substring(index + 1, json.Length - index - 1));
}
return res.ToArray();
}
更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。
长按或扫描下方二维码,免费获取 Python公开课和大佬打包整理的几百G的学习资料,内容包含但不限于Python电子书、教程、项目接单、源码等等
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!