猿问

在使用Json.net进行序列化时,如何更改属性名?

在使用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的文档似乎很少。如果您有一个很好的示例,我将尝试将其添加到正式文档中。谢谢!


慕盖茨4494581
浏览 1948回答 3
3回答

白衣染霜花

如果您无法访问更改属性的类,或者不希望始终使用相同的重命名属性,也可以通过创建自定义解析器来进行重命名。例如,如果您有一个名为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”:“支柱值”}
随时随地看视频慕课网APP
我要回答