【发布时间】:2020-08-28 08:00:12
【问题描述】:
我有这个设置
- Asp 核心 3.1 API
- 在 API 和客户端之间发送的 MyClass 共享库
- 带有 Com 类的客户端应用程序
在它们之间发送的MyClass 上,我有一个引用 com 类的字段 ComField,这仅用于客户端应用程序,不应(反)序列化,因此我将其标记为 @ 987654323@
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 对吗?
如何使默认反序列化正常工作?
【问题讨论】:
标签: asp.net-core json.net