首先,安装NewtownSoft.Json库
然后,引入命名空间
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
最后,代码如下
/// <summary>
/// json格式字符串转字典方法
/// </summary>
/// <param name="json">json格式字符串</param>
/// <returns></returns>
public static Dictionary<string, object> ToDictionary(this string json)
{
var res = new Dictionary<string, object>();
try
{
JObject jsonObj = JsonConvert.DeserializeObject(json) as JObject;
foreach (var p in jsonObj.Properties())
{
if (jsonObj[p.Name].GetType() == typeof(JObject))
{
res.Add(p.Name, jsonObj[p.Name].ToDictionary());
}
else if (jsonObj[p.Name].GetType() == typeof(JArray))
{
var jsonArr = JsonConvert.DeserializeObject(jsonObj[p.Name].ToString()) as JArray;
var dic = new Dictionary<string, object>();
for (int i = 0; i < jsonArr.Count; i++)
{
dic.Add($"{p.Name}{i}", jsonArr[i].ToDictionary());
}
res.Add(p.Name, dic);
}
else if (jsonObj[p.Name].GetType() == typeof(JValue))
{
res.Add(p.Name, jsonObj[p.Name].Value<string>());
}
}
}
catch (Exception)
{
res.Add($"NotJson{DateTime.Now:yyyyMMddHHmmssfff}", json);
}
return res;
}
存在瑕疵
会将非json格式的集合转成字典,而非List