How can I change property names when serializing with Json.net?
我在C数据集对象中有一些数据。我现在可以使用这样的json.net转换器序列化它。
1 2 3 | DataSet data = new DataSet(); // do some work here to populate 'data' string output = JsonConvert.SerializeObject(data); |
但是,在打印到.json文件时,它使用来自
在json.net文档中,在"序列化和反序列化json"→"序列化属性"下,它显示"jsonpropertyattribute…允许自定义名称"。但没有任何例子。有人知道如何使用jsonpropertyattribute将属性名更改为其他属性吗?
(直接链接到文档)
json.net的文档似乎很少。如果你有一个很好的例子,我会设法把它添加到官方文档中。谢谢!
您可以使用
1 2 3 4 5 | using Newtonsoft.Json; // ... [JsonProperty(PropertyName ="FooBar")] public string Foo { get; set; } |
文档:序列化属性
如果您无权访问类来更改属性,或者不希望总是使用相同的重命名属性,也可以通过创建自定义冲突解决程序来进行重命名。
例如,如果您有一个名为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class CustomDataContractResolver : DefaultContractResolver { public static readonly CustomDataContractResolver Instance = new CustomDataContractResolver (); protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) { var property = base.CreateProperty(member, memberSerialization); if (property.DeclaringType == typeof(MyCustomObject)) { if (property.PropertyName.Equals("LongPropertyName", StringComparison.OrdinalIgnoreCase)) { property.PropertyName ="Short"; } } return property; } } |
然后调用序列化并提供冲突解决程序:
1 2 | var result = JsonConvert.SerializeObject(myCustomObjectInstance, new JsonSerializerSettings { ContractResolver = CustomDataContractResolver.Instance }); |
结果将缩短为"short":"prop value"而不是"longpropertyname":"prop value"
此处提供有关自定义冲突解决程序的详细信息
还有另一种方法可以做到这一点,即使用特定的纳米策略,通过用
有一些预定义的命名策略,如
不同命名策略的实现可以在这里找到:https://github.com/jamesnk/newtonsoft.json/tree/master/src/newtonsoft.json/serialization