Net core dapper和postgres jsonb列

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

我想使用下面的请求,通过postman向我的PostgresJSONB列发布一些定制JSON

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

{
    "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();
        }