C# 我是否可以指示Json.NET对特定属性进行反序列化,而不是序列化?

C# 我是否可以指示Json.NET对特定属性进行反序列化,而不是序列化?,c#,json.net,C#,Json.net,我有一个AngularJS+MVC5+WebAPI2应用程序,允许用户管理浏览器中的对象集合,并在单击保存按钮时立即提交所有更改。在进行更改时,一个或多个属性被添加到JavaScript对象中:IsAdded、isUpdate和IsRemoved。在服务器端检查属性,以确定在持久化模型时要执行的操作 该模型通过Web API使用Json.NET提供,基类为: public class CollectionItemViewModel : ICollectionItem { public b

我有一个AngularJS+MVC5+WebAPI2应用程序,允许用户管理浏览器中的对象集合,并在单击保存按钮时立即提交所有更改。在进行更改时,一个或多个属性被添加到JavaScript对象中:IsAdded、isUpdate和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。我可以选择不使用序列化这三个属性,但这也会阻止它们进行反序列化

public bool ShouldSerializeIsAdded()
{
    return false;
}

public bool ShouldSerializeIsUpdated()
{
    return false;
}

public bool ShouldSerializeIsRemoved()
{
    return false;
}

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

正确的属性是JsonIgnore

[JsonIgnore]
public int Id {get;set;}
可在此处获得的源文件:


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

ShouldSerialize*绝对不应影响反序列化。你绝对肯定吗?因为据我所知,这将是一个主要的错误,所以JsonIgnore也会阻止反序列化。我使用Fiddler捕获了一个IsAdded=true的示例帖子,然后在我的IsAdded属性上重放了同一篇帖子,不管有没有JsonIgnore。正如Marc断言的,它正确地反序列化为true,shouldSerializesAdded返回false,而不使用JsonIgnore。添加JsonIgnore导致ISADED=false。@实际上,这将使属性完全未使用-在反序列化过程中也不会使用它。感谢您的实际检查。我发誓,我在对Softlion回答的评论中描述了这一点,但显然还不够接近。反序列化正在按预期工作;这个问题与我的应用程序无关,而且是特定的。