使用JSON.NET序列化对象属性/字段的特定属性

时间:2016-08-09 13:43:32

标签: c# json serialization json.net

假设我有这两个类Book

public class Book
{
    [JsonProperty("author")]
    [---> annotation <---]
    public Person Author { get; }

    [JsonProperty("issueNo")]
    public int IssueNumber { get; }

    [JsonProperty("released")]
    public DateTime ReleaseDate { get; }

   // other properties
}

Person

public class Person
{
    public long Id { get; }

    public string Name { get; }

    public string Country { get; }

   // other properties
}

我想将Book类序列化为 JSON ,但不是将属性Author序列化为整个Person类,而只需要Person Name在JSON中,所以看起来应该是这样的:

{
    "author": "Charles Dickens",
    "issueNo": 5,
    "released": "15.07.2003T00:00:00",
    // other properties
}

我知道如何实现这两个选项:

  1. 在名为Book的{​​{1}}类中定义另一个属性,并仅序列化该属性。
  2. 创建自定义AuthorName,仅指定特定属性。
  3. 上面的两个选项对我来说都是一个不必要的开销,所以我想问一下如何更简单/更短的方式来指定要序列化的JsonConverter对象的属性(例如注释)?

    提前致谢!

1 个答案:

答案 0 :(得分:2)

序列化string,而不是使用其他属性序列化Person

public class Book
{
    [JsonIgnore]
    public Person Author { get; private set; } // we need setter to deserialize

    [JsonProperty("author")]
    private string AuthorName // can be private
    {
        get { return Author?.Name; } // null check
        set { Author = new Author { Name = value }; }
    }
}