c# - MVC - 如何在没有括号 [0] 的情况下反序列化字典?
问题描述
当我将“品牌”发送到 api 时,我的反序列化字典的关键结果为“品牌 [0]”。
我有这样的课:
public class SearchRequest
{
public bool Html { get; set; } = false;
public Dictionary<string, HashSet<string>> Tags { get; set; }
}
// MVC Controller
[HttpPost]
public ActionResult Index(SearchRequest searchRequest)
{
...
}
还有一个像这样的json请求,我发布到控制器:
{
"html": true,
"tags": {
"brand": [
"bareminerals"
]
}
}
绑定接缝开始工作并创建了 searchRequest 对象,但生成的字典中没有键“ brand ”,但插入了键“ brand[0] ”如何保存我发送的真实值?
编辑:我需要标签能够包含多个标签,有多个选项,这是一个简单的例子。
解决方案
我的问题的一个解决方案是创建一个自定义模型绑定,所以这就是现在使用的,但我不明白为什么我需要,我觉得应该有一个更简单的方法?但无论如何我要把它留在这里。
public class FromJsonBodyAttribute : CustomModelBinderAttribute
{
public override IModelBinder GetBinder()
{
return new JsonModelBinder();
}
private class JsonModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var stream = controllerContext.HttpContext.Request.InputStream;
stream.Position = 0;
using (var reader = new StreamReader(stream))
{
var checkoutOrderDataStr = reader.ReadToEnd();
return JsonConvert.DeserializeObject(checkoutOrderDataStr, bindingContext.ModelType);
}
}
}
}
推荐阅读
- hadoop - Apache Pig 无法获取 MIN(列),意外符号
- javascript - 在对象中,如何添加仅包含整数的值?
- android - Kotlin MutableStateFlow.collect 正在删除值
- amazon-web-services - 对 aws eks 集群的 kubectl 身份验证
- wordpress - 在 Wordpress 搜索结果中添加每个 post_type 作为一个类
- java - 如何编写这个java程序?我知道如何在区间内编码,但只输入一个,然后 2 个素数的总和相当于输入的数字
- firebase - Firebase 存储,GB 实际下载
- python - Django 处理表单数据而无需使用 Django 创建表单
- c# - 如何使用 FileSystemWatcher 监视父目录下具有特定名称的所有文件夹?
- html - 创建 CSS 网格而不为每个单元格编写 div