指定不带批注 Json.net 元数据的替代方法

  • 本文关键字:元数据 方法 net Json json.net
  • 更新时间 :
  • 英文 :


在 Json.NET 中,如何在不受我控制的类(例如实体框架类)上指定元数据,例如要序列化的属性?

我可以发誓我已经读过一种方法,但我在文档中找不到它了。

如果我只是瞎了眼,提前对不起。

迟到回复,但迟到总比没有好。

您可以将不受您控制的类映射到您使用自动映射器、ValueInjectionor 等创建/执行控件的类。 然后,您可以自由应用任何必要的属性。

编辑:使用 IContract 解析器的 JSON.NET 文档中的解决方案

public class DynamicContractResolver : DefaultContractResolver
{
  private readonly char _startingWithChar;
  public DynamicContractResolver(char startingWithChar)
  {
    _startingWithChar = startingWithChar;
  }
  protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
  {
    IList<JsonProperty> properties = base.CreateProperties(type, memberSerialization);
    // only serializer properties that start with the specified character
    properties =
      properties.Where(p => p.PropertyName.StartsWith(_startingWithChar.ToString())).ToList();
    return properties;
  }
}
public class Book
{
  public string BookName { get; set; }
  public decimal BookPrice { get; set; }
  public string AuthorName { get; set; }
  public int AuthorAge { get; set; }
  public string AuthorCountry { get; set; }
}

集成电路旋转变压器示例

    Book book = new Book
{
  BookName = "The Gathering Storm",
  BookPrice = 16.19m,
  AuthorName = "Brandon Sanderson",
  AuthorAge = 34,
  AuthorCountry = "United States of America"
};
string startingWithA = JsonConvert.SerializeObject(book, Formatting.Indented,
  new JsonSerializerSettings { ContractResolver = new DynamicContractResolver('A') });
// {
//   "AuthorName": "Brandon Sanderson",
//   "AuthorAge": 34,
//   "AuthorCountry": "United States of America"
// }
string startingWithB = JsonConvert.SerializeObject(book, Formatting.Indented,
  new JsonSerializerSettings { ContractResolver = new DynamicContractResolver('B') });
// {
//   "BookName": "The Gathering Storm",
//   "BookPrice": 16.19
// }

相关内容

  • 没有找到相关文章

最新更新