Net Core dapper 和 postgres jsonb 专栏

Net core dapper and postgres jsonb column

我想 POST 一些自定义 JSON 通过邮递员使用以下请求到我的 postgres jsonb 列。

自定义部分在“设置”>“数据”节点中发送。我不想将自定义部件应用到我只想发送任何类型 json 并存储它的模型。

{
    "name": "Test",
    "settings": {
        "data": {
            "customdata": "hello",
            "custommore": "bye"
        }
    }
}

“数据”节点被建模 - 像这样:

public string Data { get; set; } //I have tried JSONDocument and Jsonb types to no avail.

Postman 错误:

"errors": {
        "$.settings.data": [
            "The JSON value could not be converted to System.String. Path: $.settings.data | LineNumber: 3 | BytePositionInLine: 17."
        ]
}

请求甚至没有命中我的控制器方法。我认为这是因为 customdata 和 custommore 没有映射到模型。

是否可以发送自定义 JSON 未固定到任何类型模型的数据 - 或者它必须是模型的一部分?

我正在努力寻找与 EF 核心无关的任何内容,这不是我正在使用的。

可以用custom model binding,从HttpContext.Request.Body得到json数据,再用sonConvert.DeserializeObject得到jsonobject.You即可将数据设置为您想要的格式。

这是一个演示:

数据绑定器:

public class DataBinder:IModelBinder
    {
        public Task BindModelAsync(ModelBindingContext bindingContext)
        {
            if (bindingContext == null)
            {
                throw new ArgumentNullException(nameof(bindingContext));
            }
            var model1 = new Customer();



            using (var reader = new StreamReader(bindingContext.HttpContext.Request.Body))
            {
                var body = reader.ReadToEndAsync();

                var mydata = JsonConvert.DeserializeObject<JObject>(body.Result);



                model1.Name = mydata["name"].ToString();
                model1.Settings = new Settings
                {
                    Data = mydata["settings"]["data"].ToString()
                };

            }

            bindingContext.Result = ModelBindingResult.Success(model1);
            return Task.CompletedTask;
        }
    }

控制器:

public IActionResult TestCustomModelBinding([ModelBinder(BinderType = typeof(DataBinder))]Customer customer) {
            return Ok();
        }

结果: