【发布时间】:2021-08-27 10:22:44
【问题描述】:
我的模型结构如下:
public class A
{
[JsonProperty("id")]
public string Id { get { return "A:ID"; } }
[JsonProperty("CompKey")]
public string CompKey { get; set; }
}
public class B : A
{
[JsonProperty("id")]
public string Id { get { return "B:ID"; } }
[JsonProperty("name")]
public string Name { get; set; }
}
我想序列化 B 类的一个实例,但只希望 A 类的 Id 属性可见。 我创建了一个合约解析器来传递给 Newtonsoft:
public class DatabaseEntryResolver : DefaultContractResolver
{
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
var property = base.CreateProperty(member, memberSerialization);
property.ShouldSerialize = instance => property.DeclaringType == typeof(A);
return property;
}
}
我以下列方式使用它:
var someObject = new A();
var json = JsonConvert.SerializeObject(someObject, new JsonSerializerSettings
{
ContractResolver = new DatabaseEntryResolver()
});
但是,没有在 JSON 结构中创建任何 ID 属性。任何人都可能对我遇到的这个问题有所了解?
【问题讨论】:
-
为什么是
var someObject = new A();而不是var someObject = new B();?序列化B的实例时需要得到A.Id的问题不是吗?
标签: c# json serialization json.net jsonserializer