Net core dapper和postgres jsonb列
我想使用下面的请求,通过postman向我的PostgresJSONB列发布一些定制JSON 自定义零件在“设置”>“数据”节点中发送。我不想将自定义部分应用于模型,我只想发送任何类型的json并存储它Net core dapper和postgres jsonb列,json,postgresql,asp.net-core,dapper,Json,Postgresql,Asp.net Core,Dapper,我想使用下面的请求,通过postman向我的PostgresJSONB列发布一些定制JSON 自定义零件在“设置”>“数据”节点中发送。我不想将自定义部分应用于模型,我只想发送任何类型的json并存储它 { "name": "Test", "settings": { "data": { "customdata": "hello&qu
{
"name": "Test",
"settings": {
"data": {
"customdata": "hello",
"custommore": "bye"
}
}
}
“数据”节点已建模-如下所示:
public string Data { get; set; } //I have tried JSONDocument and Jsonb types to no avail.
邮递员有以下错误:
"errors": {
"$.settings.data": [
"The JSON value could not be converted to System.String. Path: $.settings.data | LineNumber: 3 | BytePositionInLine: 17."
]
}
请求甚至没有击中我的控制器方法。我认为这是因为customdata和custommore没有映射到模型
有没有一种方法可以发送自定义JSON数据,而这些数据不是固定到任何类型的模型上的?或者它必须是模型的一部分
我正在努力寻找与EF core无关的东西,EF core不是我正在使用的。你可以使用,从HttpContext.Request.Body获取json数据,然后使用sonConvert.DeserializeObject获取json对象。你可以将数据设置为你想要的格式
下面是一个演示:
数据索引器:
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;
}
}
结果:
谢谢你的回答-看起来是实现我需要的一种方法。我最终使用AutoMapper反序列化到正确的格式。
public IActionResult TestCustomModelBinding([ModelBinder(BinderType = typeof(DataBinder))]Customer customer) {
return Ok();
}