隐藏从基类继承的属性时的JsonConvert.SerializeObject序列化问题

时间:2014-11-04 07:12:52

标签: json json.net

我已经创建了这种类,我只是使用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的情况下忽略基类属性,那么我欢迎解决方案。 感谢

0 个答案:

没有答案