使用 Netwonsoft.JSON 库序列化对象时,可以使用 JsonPropertyAttribute
指定输出顺序。属性(property)Order
.但是,我还想在默认情况下按字母顺序对属性进行排序。
最佳答案
您可以通过扩展 Newtonsoft.Json.Serialization.DefaultContractResolver
创建自定义契约(Contract)解析器。 . CreateProperties
方法是负责属性顺序的方法,因此覆盖它并重新排序属性会以您想要的方式改变行为:
public class OrderedContractResolver : Newtonsoft.Json.Serialization.DefaultContractResolver
{
protected override System.Collections.Generic.IList<Newtonsoft.Json.Serialization.JsonProperty> CreateProperties(System.Type type, Newtonsoft.Json.MemberSerialization memberSerialization)
{
var @base = base.CreateProperties(type, memberSerialization);
var ordered = @base
.OrderBy(p => p.Order ?? int.MaxValue)
.ThenBy(p => p.PropertyName)
.ToList();
return ordered;
}
}
为了使用自定义契约(Contract)解析器,您必须创建一个自定义
Newtonsoft.Json.JsonSerializerSettings
并设置其 ContractResolver
到它的一个实例:var jsonSerializerSettings = new Newtonsoft.Json.JsonSerializerSettings
{
ContractResolver = new OrderedContractResolver(),
};
然后使用上述设置对象的实例进行序列化:
using (Newtonsoft.Json.JsonWriter writer = new Newtonsoft.Json.JsonTextWriter(sw))
{
var serializer = Newtonsoft.Json.JsonSerializer.Create(jsonSerializerSettings);
serializer.Serialize(writer, jsonObject);
}
哪里
sw
是一个简单的字符串编写器:var sb = new System.Text.StringBuilder();
var sw = new System.IO.StringWriter(sb);
和
jsonObject
是您希望序列化的对象。
关于c# - 使用 Netwonsoft 库序列化 JSON 时如何按字母顺序对属性进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56933494/