Jit*_*dra 9 c# .net-core asp.net-core-webapi asp.net-core-3.0 .net-core-3.0
我创建了一个示例 dotnet core 3.0 Web API 项目并进行了以下更改,
using System.Runtime.Serialization;
namespace WebApplication17.Models
{
[DataContract]
public class TestData
{
[DataMember(Name = "testaction")]
public string Action { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
然后我在控制器中进行了更改WeatherForecastController,以添加一个 post 端点
[HttpPost("package/{packageName}/version/{version}")]
public void Post(string packageName, string version, [FromBody] TestData activityPayload)
{
Console.WriteLine(activityPayload.Action);
}
Run Code Online (Sandbox Code Playgroud)
现在我从邮递员那里打来电话或用身体卷曲
{
"testaction": "action"
}
Run Code Online (Sandbox Code Playgroud)
仍然在 的Post方法中WeatherForecastController,activityPayload.Action为null。
我期待它是“行动”
Nko*_*osi 11
默认情况下,Asp.Net Core 3 不支持[DataContract],[DataMember]而且基于此 Github 问题,他们似乎不会很快添加它
如果您想切换回使用的先前默认值Newtonsoft.Json,它确实尊重这些属性,那么您必须执行以下操作:
安装Microsoft.AspNetCore.Mvc.NewtonsoftJson NuGet 包。
在ConfigureServices()添加呼叫AddNewtonsoftJson()
public void ConfigureServices(IServiceCollection services) {
//...
services.AddControllers()
.AddNewtonsoftJson(); //<--
//...
}
Run Code Online (Sandbox Code Playgroud)
Jit*_*dra 10
从 .NET Core 3.0 RC1 开始,该System.Text.Json库不支持System.Runtime.Serialization属性。您可以在GitHub 上找到一个问题,该问题正在跟踪此遗漏,但目前似乎没有任何打算改变这一点。
在此期间,您可以做的是切换到Newtonsoft.Json用作 ASP.NET Core 3.0 的 JSON 序列化程序,这应该会恢复此功能(代价是不利用System.Text.Json速度更快的解析器)。
首先,Microsoft.AspNetCore.Mvc.NewtonsoftJson在您的项目中添加对包的引用:
<Project Sdk="Microsoft.NET.Sdk.Web">
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" />
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
然后在您的服务集合上调用扩展程序。
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddNewtonsoftJson();
}
Run Code Online (Sandbox Code Playgroud)
另一方面,如果您乐于定义没有System.Runtime.Serialization属性的模型并使用System.Text.Json.Serialization属性来代替,那么您可以执行以下操作:
using System.Text.Json.Serialization;
namespace WebApplication17.Models
{
public class TestData
{
[JsonPropertyName("testaction")]
public string Action { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处找到支持的属性的完整列表:https : //docs.microsoft.com/en-us/dotnet/api/system.text.json.serialization.jsonpropertynameattribute?view=netcore-3.0
[JsonPropertyName("testaction")]向Action属性添加属性。这应该可以解决您的问题。
有关更多信息,请参见此处:https : //devblogs.microsoft.com/dotnet/try-the-new-system-text-json-apis/
| 归档时间: |
|
| 查看次数: |
5656 次 |
| 最近记录: |