Asp.net mvc IgnoreDataMember属性在**反**序列化期间跳过json对象属性
,只应在序列化期间考虑IgnoreDataMember属性 然而,从我看到的情况来看,MVC模型绑定在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
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; }
这允许反序列化进入,但阻止序列化退出