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();

}