C# - 来自 Microsoft.AspNetCore.Mvc 的 HttpPost 方法使用 "ValueKind = datatype : value" 而不是 "value" 反序列化为对象数据类型
C# - HttpPost method from Microsoft.AspNetCore.Mvc is deserializing to object datatype with "ValueKind = datatype : value" instead of just "value"
在两个不同的项目上有两个 API 端点,它们接收 json 并将其反序列化为相同的实例 class。
Json:
{
"name": "MyId",
"objectData": 4141
}
Class:
public class MyObject
{
public string name { get; set; }
public object objectData { get; set; }
}
端点(相同)
[HttpPost, Route("v1/testController/TestEndpoint")]
public IActionResult TestEndpoint(MyObject myObject)
{
try
{
//Do stuff
}
catch (ApiException e)
{
//Handle error
}
}
然而,当 json 被反序列化时,objectData 在两个项目中持有不同的值:
myObjectProjectA
{
name: "MyId"
objectData: 4141
}
myObjectProjectB
{
name: "MyId"
objectData: ValueKind = Number : "4141"
}
期望的结果是 myObjectProjectA。有什么想法为什么它们不同,或者有什么资源可以更好地理解反序列化器如何为 HttpPost 方法工作?
在这两个项目中,我们都使用了以下包:
Microsoft.AspNetCore (2.2.0)
Microsoft.AspNetCore.Mvc.NewtonsoftJson (3.1.15)
谢谢!
从 post 找到关于 JObject 有类似问题的答案。即使安装了 Newtonsoft.Json,端点仍在使用 system.Text.Json,因为需要将 Newtonsoft.Json 添加到 ConfigureServices()
serviceCollection.AddControllers()
.AddNewtonsoftJson();
The JSON value could not be converted to Newtonsoft.Json.Linq.JToken. Path: $ | LineNumber: 1 | BytePositionInLine: 8
在两个不同的项目上有两个 API 端点,它们接收 json 并将其反序列化为相同的实例 class。
Json:
{
"name": "MyId",
"objectData": 4141
}
Class:
public class MyObject
{
public string name { get; set; }
public object objectData { get; set; }
}
端点(相同)
[HttpPost, Route("v1/testController/TestEndpoint")]
public IActionResult TestEndpoint(MyObject myObject)
{
try
{
//Do stuff
}
catch (ApiException e)
{
//Handle error
}
}
然而,当 json 被反序列化时,objectData 在两个项目中持有不同的值:
myObjectProjectA
{
name: "MyId"
objectData: 4141
}
myObjectProjectB
{
name: "MyId"
objectData: ValueKind = Number : "4141"
}
期望的结果是 myObjectProjectA。有什么想法为什么它们不同,或者有什么资源可以更好地理解反序列化器如何为 HttpPost 方法工作?
在这两个项目中,我们都使用了以下包: Microsoft.AspNetCore (2.2.0) Microsoft.AspNetCore.Mvc.NewtonsoftJson (3.1.15)
谢谢!
从 post 找到关于 JObject 有类似问题的答案。即使安装了 Newtonsoft.Json,端点仍在使用 system.Text.Json,因为需要将 Newtonsoft.Json 添加到 ConfigureServices()
serviceCollection.AddControllers() .AddNewtonsoftJson();
The JSON value could not be converted to Newtonsoft.Json.Linq.JToken. Path: $ | LineNumber: 1 | BytePositionInLine: 8