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

c# – NancyFx DynamicDictionary

发布时间:2020-12-15 23:23:32 所属栏目:百科 来源:网络整理
导读:我试图理解NancyFX中的DynamicDictionary,它看起来很酷.有没有人知道一篇博文或类似文章,它是通过内部的? 我需要一个propertybag来传递对象,我不知道它们的内容,因为它们来自我的系统之外的JSON.但是基于这些对象的内容,比如我需要做某些属性的存在. 我可以
我试图理解NancyFX中的DynamicDictionary,它看起来很酷.有没有人知道一篇博文或类似文章,它是通过内部的?

我需要一个propertybag来传递对象,我不知道它们的内容,因为它们来自我的系统之外的JSON.但是基于这些对象的内容,比如我需要做某些属性的存在.

我可以绕过动态对象,但我认为这有点过于模糊.真的不喜欢那样.

我需要嵌套字典,以完全代表对象图.

解决方法

动态字典只是一个包含字典的ExpandoObject.所以仍然可以像字典一样访问它.

例如,在MVC中,您可以访问表单属性,如下所示:

var name = Request["name"];

要么

var name = Request.Form["name"];

当请求进入Nancy时,您可以通过点表示法访问它.或者通过类索引器.

var name = parameters.name;
var name = parameters["name"];

当您发送具有不能以点表示法使用的值的查询字符串或表单名称时,这很方便.

var firstName = parameters["first-name"];

这些值也是动态的,因此它可以由嵌套对象组成.这允许你做以下的事情:

var firstName = parameters.contact.firstname;

因此,如果您将JSON有效负载传递给请求,则可以使用点表示法访问整个结构.

但是,您可能会发现大多数使用Nancy的开发人员只能使用此方法访问Route值或QueryString值.

Get["/products/{id:int}/"] = parameters => {
   int id = parameters.id;
};

回到最初的问题:

有博客文章或任何doco:没有.

它为什么存在:对于糖语法.

我可以将它用于我想要的东西:绝对是!

你能告诉我如何使用它:不,但它应该不难.只要看看南希的模型绑定就可以搞清楚.这不是太难.

只是根据OP的答案进行编辑.

当您访问点表示法时,续点符号将仅适用于其他动态类型.

这意味着使用var将导致异常,因为编译器处理var和dynamic的方式.

当你这样做时:

var person = parameters.person;
var name = person.name;

参数当前是动态的并且实现了TryGetMember,它在内部查找值的字典并尝试返回值.

将对象定义为person变量的var时.编译器假定对象之后存在任何内容,因此它在person变量上查找名称.

由于名称不存在作为人的成员,它将抛出.

要解决此问题,必须将变量指定为动态.所以这个例子变成了:

dynamic person = parameters.person;
var name = person.name;

这会奏效.

(编辑:李大同)

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

    推荐文章
      热点阅读