Asp Core 3.1 API JsonIgnore(反序列化中不会忽略)

问题描述 投票:0回答:1

我有此设置

  • Asp Core 3.1 API
  • 在API和客户端之间发送的MyClass共享库
  • 带有Com类的客户端应用程序

在它们之间发送的MyClass上,我有一个引用com类的字段ComField,该字段仅在客户端应用程序上使用,不应被(反)序列化,因此我将其标记为[JsonIgnore] ]

class MyClass{
  [JsonIgnore]
  public ComThingy ComField {
    get{// code here that throws the error when deserilaized on the API}
    set{// code here}
  }
}

当我编写API接受这样的类时,反序列化该类时会出现错误。在进入方法之前,调试器在反序列化MyClass时引发错误:

[HttpPost]
public async Task<ActionResult<MyClassReply>> Post([FromBody] MyClass myclass){
    // code here 
}

API引发了一个异常,即访问MyClass上的getter会引发错误(因为Com不在API上。)>

如果我手动进行反序列化,那么效果很好,但是我的挥霍之举无法正确生成整个API。

[HttpPost]
public async Task<ActionResult<MyClassReply>> Post(){

    // this works fine
    var rdr = new StreamReader(Request.Body);
    var mcj = await rdr.ReadToEndAsync();           
    var myclass = Newtonsoft.Json.JsonConvert.DeserializeObject<MyClass>(mcj);

    // code here 
}

所以我的问题是:ASP API内置反序列化为什么会忽略JsonIgnore属性,而仍然尝试处理该属性(引发错误),为什么手动反序列化按预期方式工作(即忽略该属性)?默认管道仍使用NewtonSoft rght吗?

以及如何使默认的反序列化工作正常?

我具有在API和带有Com类的客户端客户端应用程序之间发送的MyClass设置的Asp Core 3.1 API共享库,在它们之间发送的MyClass上,我有一个字段ComField that ...

asp.net-core json.net
1个回答
0
投票
[从ASP.NET Core 3.0开始,默认的JSON序列化器为System.Text.Json,而不是Newtonsoft.Json。您需要在.AddNewtonsoftJson()中调用Startup.cs才能使用它(例如,请参见this answer)。
© www.soinside.com 2019 - 2024. All rights reserved.