我可以指示Json.NET反序列化但不序列化特定属性吗

本文关键字:序列化 属性 指示 Json NET 反序列化 我可以 | 更新日期: 2024-09-23 15:30:56

我有一个AngularJS+MVC 5+Web API 2应用程序,它允许用户在浏览器中管理对象集合,并在单击"保存"按钮时立即提交所有更改。在进行更改时,会向JavaScript对象添加一个或多个属性:IsAdded、IsUpdated和IsRemoved。在服务器端检查属性,以确定在持久化模型时要做什么。

该模型通过Web API使用Json.NET提供,基类为:

public class CollectionItemViewModel : ICollectionItem
{
    public bool IsAdded { get; set; }
    public bool IsUpdated { get; set; }
    public bool IsRemoved { get; set; }
}

这非常有效,但在我的序列化JSON中添加了cruft。我可以选择不使用ShouldSerialize序列化这三个属性,但这也会阻止它们进行反序列化。

public bool ShouldSerializeIsAdded()
{
    return false;
}
public bool ShouldSerializeIsUpdated()
{
    return false;
}
public bool ShouldSerializeIsRemoved()
{
    return false;
}

是否可以使用Json.NET反序列化而不序列化特定属性?

我可以指示Json.NET反序列化但不序列化特定属性吗

您应该能够只使用ShouldSerialize*方法,如问题所示。这些只是影响序列化,而不是反序列化。

正确的属性是JsonIgnore。

[JsonIgnore]
public int Id {get;set;}

此处提供的源文档:

http://james.newtonking.com/archive/2009/10/23/efficient-json-with-json-net-reducing-serialized-json-size