Asp.net mvc IgnoreDataMember属性在**反**序列化期间跳过json对象属性

Asp.net mvc IgnoreDataMember属性在**反**序列化期间跳过json对象属性,asp.net-mvc,json,validation,attributes,asp.net-web-api,Asp.net Mvc,Json,Validation,Attributes,Asp.net Web Api,,只应在序列化期间考虑IgnoreDataMember属性 然而,从我看到的情况来看,MVC模型绑定在json的*反*序列化过程中也在使用它 考虑以下类别: public class Tax { public Tax() { } public int ID { get; set; } [Required] [Range(1, int.MaxValue)] [IgnoreDataMember] public int PropertyId { ge

,只应在序列化期间考虑IgnoreDataMember属性

然而,从我看到的情况来看,MVC模型绑定在json的*反*序列化过程中也在使用它

考虑以下类别:

public class Tax
{
    public Tax() { }

    public int ID { get; set; }

    [Required]
    [Range(1, int.MaxValue)]
    [IgnoreDataMember]
    public int PropertyId { get; set; }
}
如果将以下json字符串POST/PUT到操作方法:

{"Position":0,"Description":"State sales tax","Rate":5,"RateIsPercent":true,"PropertyId":1912}
我得到以下验证错误:

{
  "Message": "The request is invalid.",
  "ModelState": {
    "newTax.PropertyId": [
      "The field PropertyId must be between 1 and 2147483647."
    ]
  }
}
[Range(1,int.MaxValue)]
[Required]
属性都无效

如果删除
[IgnoreDataMember]
属性,一切正常

是否可以使用另一个属性来告诉MVC绑定在反序列化过程中不要忽略该属性


这仅在发布json字符串时发生。如果我发布一个名称/值字符串,一切都正常。

答案与Json.net的行为有关。这就是模型绑定所使用的,它正在检查
IgnoreDataMember
的序列化和反序列化,这使得它对我来说毫无用处(因为我只想将它用于序列化)

JsonIgnore
属性的工作方式完全相同

有鉴于此,我从属性中删除了所有ignore属性,转而使用json.net的条件序列化方法

因此,基本上为上述PropertyId字段添加此字段:

public bool ShouldSerializePropertyId() { return false; }
这允许反序列化进入,但阻止序列化退出