我在 Json.Net 上遇到了问题。
我的应用程序连接到数据库并在其中存储了一些数据。假设我的应用程序有三个不同的类:实体、组、组织
简要介绍实体类:
public class Entity
{
[JsonIgnore]
public int ID { get; private set; }
[JsonProperty]
public string UID { get; private set; }
[JsonProperty]
public Gender EntityGender { get; set; }
[JsonProperty]
public string Surname { get; set; }
[JsonProperty]
public string Forename { get; set; }
[JsonProperty]
public Group EntityGroup { get; set; }
[JsonProperty]
public Organisation EntityOrganisation { get; set; }
组织和组也具有 ID 属性。
序列化实体时,我不想完全序列化实体组和实体组织,而只想序列化它们的 ID。
一些快速示例,我希望它看起来像:
(现在的样子)
{
"UID": "6c5204356b3a1a33",
"Surname": "Bar",
"Forename": "Foo",
"EntityGroup": {
"Name": "XGroup",
"GroupOrganisation": {
"Name": "FooOrg"
}
},
"EntityOrganisation": null,
"EntityStation": null
}
(它应该是什么样子)
{
"UID": "6c5204356b3a1a33",
"Surname": "Bar",
"Forename": "Foo",
"EntityGroup": {
"ID": 1,
"GroupOrganisation": {
"ID": 1
}
},
"EntityOrganisation": null,
"EntityStation": null
}
是否可以设置一个 JsonParser 在序列化实体时仅序列化组和组织的 ID 属性?
这个呢:
在Entity
类中,将 JsonConverter
属性添加到EntityGroup
类:
[JsonProperty]
[JsonConverter(typeof(EntityGroupConverter))]
public Group EntityGroup { get; set; }
这将使用EntityGroupConverter
来序列化Group
。此类如下所示:
class EntityGroupConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Group);
}
public override object ReadJson(JsonReader reader, Type objectType,
JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer, object value,
JsonSerializer serializer)
{
Group group = value as Group;
serializer.Serialize(writer, new { ID = group.ID,
GroupOrganisation = new { ID = group.Organisation.ID } });
}
}
这里的关键是使用 serializer
编写仅包含所需属性的匿名对象。
请注意,ReadJson
未实现 - 我假设此阶段不需要反序列化。
编辑
正如 Skadier 指出的那样,ReadJson
的签名在最新版本的 Json.NET 中如下所示(此问题中使用的版本是 3.5.0.0):
public override object ReadJson(JsonReader reader, Type objectType,
object existingValue, JsonSerializer serializer)