为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕盖茨4494581 2019-06-26 16:38:49
在使用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”:“支柱值”}


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 1947 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信