System.Text.Json - JSON 值无法转换为 System.String
System.Text.Json - The JSON value could not be converted to System.String
我有以下 json
被发送到 api
{
"Id":22,
"UserId":22,
"Payload":{
"Field":"some payload value"
...more unknown field/values go here
},
"ContextTypeId":1,
"EventTypeId":1,
"SessionId":1
}
我想将其映射到以下内容:
public class CreateTrackItem : IRequest<int>
{
public int Id { get; set; }
public int UserId { get; set; }
public string Payload { get; set; }
public int ContextTypeId { get; set; }
public int SessionId { get; set; }
public int EventTypeId { get; set; }
}
当映射 Payload
属性 失败时,它无法将 json
映射到字符串,我只是希望 Payload
成为 string
版本json
(将进入 postgres
中的 jsonb
字段)
我正在使用 .NET Core 3.0,在切换到 Newtonsoft
.
之前,如果可能的话,我更喜欢使用内置的 System.Text.Json
您可以使用对象类型而不是字符串。或者使用 Newtonsoft 的 JToken 类型,正如 Ryan 已经在上面评论过的那样。
public object Payload { get; set; }
public class CreateTrackItem : IRequest<int>
{
public int Id { get; set; }
public int UserId { get; set; }
public object Payload { get; set; }
public int ContextTypeId { get; set; }
public int SessionId { get; set; }
public int EventTypeId { get; set; }
}
如果您使用的是 asp.net 核心 3.0(或 System.Text.Json
与 .Net 6),那么它具有内置的 JSON 支持。我使用了以下内容,无需设置自定义输入处理程序即可工作。
//// using System.Text.Json;
[HttpPost]
public async Task<IActionResult> Index([FromBody] JsonElement body)
{
string json = System.Text.Json.JsonSerializer.Serialize(body);
return Ok();
}
我有以下 json
被发送到 api
{
"Id":22,
"UserId":22,
"Payload":{
"Field":"some payload value"
...more unknown field/values go here
},
"ContextTypeId":1,
"EventTypeId":1,
"SessionId":1
}
我想将其映射到以下内容:
public class CreateTrackItem : IRequest<int>
{
public int Id { get; set; }
public int UserId { get; set; }
public string Payload { get; set; }
public int ContextTypeId { get; set; }
public int SessionId { get; set; }
public int EventTypeId { get; set; }
}
当映射 Payload
属性 失败时,它无法将 json
映射到字符串,我只是希望 Payload
成为 string
版本json
(将进入 postgres
中的 jsonb
字段)
我正在使用 .NET Core 3.0,在切换到 Newtonsoft
.
System.Text.Json
您可以使用对象类型而不是字符串。或者使用 Newtonsoft 的 JToken 类型,正如 Ryan 已经在上面评论过的那样。
public object Payload { get; set; }
public class CreateTrackItem : IRequest<int>
{
public int Id { get; set; }
public int UserId { get; set; }
public object Payload { get; set; }
public int ContextTypeId { get; set; }
public int SessionId { get; set; }
public int EventTypeId { get; set; }
}
如果您使用的是 asp.net 核心 3.0(或 System.Text.Json
与 .Net 6),那么它具有内置的 JSON 支持。我使用了以下内容,无需设置自定义输入处理程序即可工作。
//// using System.Text.Json;
[HttpPost]
public async Task<IActionResult> Index([FromBody] JsonElement body)
{
string json = System.Text.Json.JsonSerializer.Serialize(body);
return Ok();
}