我有此设置
在它们之间发送的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 ...
System.Text.Json
,而不是Newtonsoft.Json
。您需要在.AddNewtonsoftJson()
中调用Startup.cs
才能使用它(例如,请参见this answer)。