我已经创建了这种类,我只是使用JsonConvert.SerializeObject(instance)序列化了一个实例;
public sealed class MetadataList : Dictionary<string, Metadata>, IEnumerable<Metadata>
{
[JsonProperty("F")]
public FormatEnum Format { get; set; }
//...
}
结果是因为我期望序列化字典只显示Format属性。所以我把这个类标记为JsonObject。
[JsonObject]
public sealed class MetadataList
{
//...
}
然后json包含所有Dictionary&lt;&gt;基类的属性。所以我试着像这样覆盖它们。
public sealed class MetadataList : Dictionary<string, Metadata>, IEnumerable<Metadata>
{
[JsonProperty("F")]
public FormatEnum Format { get; set; }
[JsonProperty("V")]
public new IEnumerable<Metadata> Values { get { return base.Values; } }
[JsonIgnore]
public new int Count { get { return base.Count; } }
[JsonIgnore]
public new IEqualityComparer<string> Comparer { get { return base.Comparer; } }
[JsonIgnore]
public new IEnumerable<string> Keys { get { return base.Keys; } }
//...
}
比json包含基类和我的类属性的联合,除了被忽略的属性,因此json包含“Values”:[...]和“V”:[...]以及是相同的。 与此同时,我正在写我的班级JsonConverter,我意识到了以下几点。
JsonObjectContract contract = (JsonObjectContract)serializer.ContractResolver.ResolveContract(value.GetType());
var properties = contract.Properties;
contract.Properties包含我的类F和V JsonProperties,包含基类Values,Count,Comparer和Keys JsonProperties以及内部SerializeObject 方法迭代此属性并序列化所有这些属性。
我只是想知道序列化中的错误或这是预期的行为?因为我的观点,我已经隐藏了基类属性,而不是那些属性应该包含我的属性。 我在我的JsonConverter中管理它所以一切都很好只是我必须写更多测试什么不是问题。
如果有人知道如何在没有JsonConverter的情况下忽略基类属性,那么我欢迎解决方案。 感谢