我遇到了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属性 序列化实体时,我不想完全序列化EntityGroup和EntityOrganisation,只需要他们的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
}
在序列化实体时,是否可以设置仅序列化组和组织的ID属性的JsonParser?
答案 0 :(得分:2)
这个怎么样:
在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)