加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Nancy FX将模型绑定中的字典键大写

发布时间:2020-12-15 22:17:49 所属栏目:百科 来源:网络整理
导读:我正在尝试将 JSON发布到NancyFx. JSON如下: { "prop1": 1,"entries":{ "Entry1": 1,"entry2": 2 }} 在服务器端,我创建了一个相应的模型: public class Model{ public int Prop1 { get; set; } public IDictionarystring,object Entries { get; set; }} JS
我正在尝试将 JSON发布到NancyFx. JSON如下:

{  
   "prop1": 1,"entries":{  
      "Entry1": 1,"entry2": 2
   }
}

在服务器端,我创建了一个相应的模型:

public class Model
{
    public int Prop1 { get; set; }
    public IDictionary<string,object> Entries { get; set; }
}

JSON中的entries字段具有动态结构,并且因为IDictionary< string,object>用于模型中.

然后我绑定模型:

this.Bind<Model>();

模型创建成功,但问题是在条目字典中,两个键都是大写的.对我来说情况非常重要,我希望第二个键是entry2,而不是Entry2.

我也尝试使用JavaScriptConverter和JavaScriptPrimitiveConverter,但在Deserialize方法中我得到了大写数据.

任何想法哦如何解决这个问题?

解决方法

对我来说,这是通过配置JavascriptSerializer来保留套管来解决的.

不幸的是我无法找到一个干净的方法来做到这一点,但这是我现在正在使用的黑客.

public class Model
    {
        public IDictionary<string,object> Entries { get; set; }
    }

    public class CustomModelBinder : IModelBinder
    {

        public bool CanBind(Type modelType)
        {
            return modelType == typeof(Model);
        }

        public object Bind(NancyContext context,Type modelType,object instance,BindingConfig configuration,params string[] blackList)
        {
            using (var sr = new StreamReader(context.Request.Body))
            {
                return (new JavaScriptSerializer() { RetainCasing = true }).Deserialize<Model>(sr.ReadToEnd());
            }
        }
    }

Nancy将在运行时获取此绑定器,无需显式注册任何内容.

此解决方案并不理想,因为它忽略了一些Nancy功能,如黑名单和可能的其他绑定配置设置.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读