【发布时间】:2016-08-09 13:43:31
【问题描述】:
假设我有这两个类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
}
我知道如何实现这一点的两种选择:
- 在
Book类中定义另一个名为AuthorName的属性并仅序列化该属性。 - 创建自定义
JsonConverter,其中仅指定特定属性。
以上两个选项对我来说似乎都是不必要的开销,所以我想问一下是否有任何更简单/更短的方法来指定要序列化的 Person 对象的属性(例如注释)?
提前致谢!
【问题讨论】:
-
您可以在 getter 中添加另一个
string类型的属性,返回Author.Name并在 setter 中创建Person(使用给定的名称)。而是序列化该属性(使用JsonProperty("author")对其进行归因)。 -
您可以从
Person派生Book并尝试public string Author { get { return this.Name; } }可能吗? *编辑:Nvm,无论如何你都不想序列化整个Person类。为了透明,不删除评论:) -
@Sinatr 谢谢,我想到了这个选项,但我想避免创建另一个单一用途的属性:P
标签: c# json serialization json.net