在使用Json.net进行序列化时,如何更改属性名?我在C#DataSet对象中有一些数据。我现在可以使用这样的Json.net转换器来序列化它DataSet data = new DataSet();// do some work here to populate 'data'string output = JsonConvert.SerializeObject(data);但是,这将使用data当打印到.json文件时。我希望将属性名更改为不同的名称(例如,将“foo”更改为“bar”)。在Json.net文档,在“序列化和反序列化JSON‘→’序列化属性”下,它写着“JsonPropertyAttribute.允许自定义名称”。但没有任何例子。有人知道如何使用JsonPropertyAttribute将属性名更改为其他名称吗?(与文档的直接链接)Json.net的文档似乎很少。如果您有一个很好的示例,我将尝试将其添加到正式文档中。谢谢!
3 回答
白衣染霜花
TA贡献1796条经验 获得超10个赞
如果您无法访问更改属性的类,或者不希望始终使用相同的重命名属性,也可以通过创建自定义解析器来进行重命名。
例如,如果您有一个名为MyCustomObject
,它有一个名为LongPropertyName
,您可以使用像这样的自定义解析器(…)。
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; }}
然后调用序列化并提供解析器:
var result = JsonConvert.SerializeObject(myCustomObjectInstance, new JsonSerializerSettings { ContractResolver = CustomDataContractResolver.Instance });
结果将缩短为{“短”:“道具价值”}而不是{“LongPropertyName”:“支柱值”}
- 3 回答
- 0 关注
- 1947 浏览
添加回答
举报
0/150
提交
取消