有的服务端接口需要对Json进行字典排序,然后再进行相关的验证等,由于服务器上面只能使用.net 2.0,网上查了很多都是.net 2.0以上的,在.net 2.0中无法使用,自己就写了个比较笨的方法,还有就是,Json字符串格式不固定,万一哪天Json多了些字段和多了些其它数组什么的.(下面只是一个实例,没有对是不是数组进行判断)
String Json = "{"
+ "\"vCode\": \"cs100\","
+ "\"order\": \"PC1709-000342\","
+ "\"Type\": 1,"
+ "\"number\": \"1\","
+ "\"Name\": \"测试\","
+ "\"arr\": ["
+ "{"
+ "\"recAddress\": \"这里是卖萌的收件地址1\","
+ "\"sendaddressee\": \"这里是卖萌的发货地址1\","
+ "\"billCode\": \"20122311224\","
+ "\"deliveryCode\": \"20122311224222\","
+ "},"
+ "{"
+ "\"recAddress\": \"这里是卖萌的收件地址2\","
+ "\"sendaddressee\": \"这里是卖萌的发货地址2\","
+ "\"billCode\": \"20122311223\","
+ "\"deliveryCode\": \"20122311224221\","
+ "}"
+ "],"
+ "\"aaaa\": \"这里是测试a\","
+ "\"bbbb\": \"这里是测试b\""
+ "}";
string temp_a = "";
//Json转Dictionary
Dictionary<string, object> dicJson = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(Json);
List<KeyValuePair<string, object>> listJson = new List<KeyValuePair<string, object>>(dicJson);
//倒叙排列:只需要把变量s2 和 s1 互换就行了 例: return s1.Value.CompareTo(s2.Value);
//进行排序 目前是顺序
listJson.Sort(delegate (KeyValuePair<string, object> s1, KeyValuePair<string, object> s2)
{
//return s2.Key.CompareTo(s1.Key);//倒序
//这里可以加一个是否是数组判断[{},{}]
if (s2.Key.Equals("arr"))
{
if (temp_a.Trim().Length == 0)
{
temp_a = s2.Value.ToString();
}
}
return s1.Key.CompareTo(s2.Key);//顺序
});
dicJson.Clear();//清除dicJson
//将数据部分再次转换为json字符串
if (temp_a.Trim().Length > 0)
{
string jsondata = Newtonsoft.Json.JsonConvert.SerializeObject(temp_a);
//获取数据中的 不同类型的数据
/*下面是解析JArray的部分*/
JArray jlist = JArray.Parse(temp_a);
if (jlist.Count != 0)
{
for (int i = 0; i < jlist.Count; i++)
{
//TestJson diccddddd = Newtonsoft.Json.JsonConvert.DeserializeObject<TestJson>(jsondata);
string temp_jList = jlist[i].ToString();
Dictionary<string, object> dicArry = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(temp_jList);
List<KeyValuePair<string, object>> listArry = new List<KeyValuePair<string, object>>(dicArry);
//倒叙排列:只需要把变量s2 和 s1 互换就行了 例: return s1.Value.CompareTo(s2.Value);
//进行排序 目前是顺序
listArry.Sort(delegate (KeyValuePair<string, object> s1, KeyValuePair<string, object> s2)
{
return s1.Key.CompareTo(s2.Key);//顺序
});
dicArry.Clear();//清除dicArry
}
}
}
//Dictionary转Json(与上面无关,这里只测试Dictionary转Json)
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("fga", "aaa");
dic.Add("sdf", "dd");
dic.Add("dss", "sd");
dic.Add("dnline", "sds");
dic.Add("news", "sd");
dic.Add("acj", "fd");
dic.Add("Acj", "dd");
dic.Add("abc", "18");
String temp = JsonMapper.ToJson(dic);
//key按字母先后顺序
SortedDictionary<string, string> sorWaybillSystem = new SortedDictionary<string, string>();
sorWaybillSystem.Add("b", "1234");
sorWaybillSystem.Add("d", "321");
sorWaybillSystem.Add("d", "12321");
sorWaybillSystem.Add("a", "12312");
List<KeyValuePair<string, string>> listWaybillSystem = new List<KeyValuePair<string, string>>();
//遍历元素
foreach (KeyValuePair<string, string> kv in sorWaybillSystem)
{
listWaybillSystem.Add(kv);
}
排序1:
对数组排序后结果1:
对数组排序后结果2:
Dictionary转Json: