我创建了一个示例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; }
}
}
然后我在控制器WeatherForecastController
中进行了更改,以添加发布端点
[HttpPost("package/{packageName}/version/{version}")]
public void Post(string packageName, string version, [FromBody] TestData activityPayload)
{
Console.WriteLine(activityPayload.Action);
}
现在我打了个邮递员打来的电话,或者curl着身体
{
"testaction": "action"
}
在Post
的{{1}}方法中,WeatherForecastController
为 null 。
我原以为这是“行动”
答案 0 :(得分:3)
Asp.Net Core 3默认情况下不支持[DataContract]
,[DataMember]
,并且基于此Github问题,他们似乎不会很快添加它
如果您要切换回使用Newtonsoft.Json
的默认设置(它会保留这些属性),则必须执行以下操作:
安装Microsoft.AspNetCore.Mvc.NewtonsoftJson NuGet软件包。
在ConfigureServices()
中将通话添加到AddNewtonsoftJson()
public void ConfigureServices(IServiceCollection services) {
//...
services.AddControllers()
.AddNewtonsoftJson(); //<--
//...
}
答案 1 :(得分:2)
将| client_tracking_id | external_id | transaction_date | transaction_type | transaction_amount |
|--------------------|--------------|----------------------|------------------|--------------------|
| 281101002240 | 281101002240 | 2019-08-14T18:03:04Z | Purchase | 2000 |
属性添加到[JsonPropertyName("testaction")]
属性。这应该可以解决您的问题。
有关更多信息,请参见此处: https://devblogs.microsoft.com/dotnet/try-the-new-system-text-json-apis/
答案 2 :(得分:2)
从.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>
然后在您的服务集合中调用该分机。
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddNewtonsoftJson();
}
另一方面,如果您乐于定义没有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; }
}
}
您可以在此处找到受支持属性的完整列表:https://docs.microsoft.com/en-us/dotnet/api/system.text.json.serialization.jsonpropertynameattribute?view=netcore-3.0