public class SortContractResolver : DefaultContractResolver
{
protected override IList
<JsonProperty
> CreateProperties(Type type
, MemberSerialization memberSerialization
)
{
IList
<JsonProperty
> properties
= base.CreateProperties(type
, memberSerialization
);
return properties
.OrderBy(x
=> x
.PropertyName
).ToList();
}
}
private static dynamic GetSorObject(Object obj
)
{
if (obj
is JArray
)
{
var list
= new List<dynamic>();
foreach (var item
in (obj
as JArray
))
{
list
.Add(GetSorObject(item
));
}
return list
;
}
else
{
var paramDic
= JsonConvert
.DeserializeObject
<Dictionary
<string, dynamic>>(JsonConvert
.SerializeObject(obj
));
var sortedDic
= new SortedDictionary<string, dynamic>();
for (int i
= 0; i
< paramDic
.Count
; i
++)
{
if (paramDic
.ElementAt(i
).Value is JArray
|| paramDic
.ElementAt(i
).Value is JObject
)
{
sortedDic
.Add(paramDic
.ElementAt(i
).Key
, GetSorObject(paramDic
.ElementAt(i
).Value
));
}
else
{
sortedDic
.Add(paramDic
.ElementAt(i
).Key
, paramDic
.ElementAt(i
).Value
);
}
}
return sortedDic
;
}
}
public string StortJson(string json
)
{
var dic
= JsonConvert
.DeserializeObject
<SortedDictionary
<string, object>>(json
);
SortedDictionary
<string, object> keyValues
= new SortedDictionary<string, object>(dic
);
var result
= keyValues
.OrderByDescending(m
=> m
.Key
);
Dictionary
<string, object> resultDic
=result
.ToDictionary(x
=> x
.Key
, x
=> x
.Value
);
return JsonConvert
.SerializeObject(resultDic
);
}
参考: c#-Json-序列化对属性名排序 c#-Json-Json字符串字段递归排序 c# 对JSON字符串排序(KEY/VALUE)
C# JSON按key进行排序
c# – 使用.ToDictionary() Order of serialized fields using JSON.NET