IgnoreDataMember属性** ** DE序列化期间跳过JSON对象属性(IgnoreDa

2019-10-18 00:59发布

根据该文档时,IgnoreDataMember属性只应该序列化过程中加以考虑。

从我所看到的,然而,JSON的* *序列化期间以及使用它的MVC模型绑定。

考虑下面的类:

public class Tax
{
    public Tax() { }

    public int ID { get; set; }

    [Required]
    [Range(1, int.MaxValue)]
    [IgnoreDataMember]
    public int PropertyId { get; set; }
}

如果POST / PUT以下JSON字符串到操作方法:

{"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字符串时发生。 如果我发布的名称/值字符串,寄托都工作正常。

Answer 1:

答案与Json.net的行为做。 这就是模型结合使用,它的检查IgnoreDataMember的序列化和反序列化使其失去作用,我(因为我只想使用它的序列化)。

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

鉴于此,我脱下我的财产全部忽略的属性,并切换到使用json.net的条件序列化方法。

所以基本上添加此对上述物业ID字段:

public bool ShouldSerializePropertyId() { return false; }

这使得反序列化进来,但阻止系列化外出。



文章来源: IgnoreDataMember attribute is skipping json object properties during **DE**serialization