Jay*_*ete 3 c# dynamic propertybag nancy
我试图理解NancyFX中的DynamicDictionary,它看起来很酷.有没有人知道一篇博文或类似文章,它是通过内部的?
我需要一个propertybag来传递对象,我不知道它们的内容,因为它们来自我的系统之外的JSON.但是基于这些对象的内容,比如我需要做某些属性的存在.
我可以绕过动态对象,但我认为这有点过于模糊.真的不喜欢那样.
我需要嵌套字典,以完全代表对象图.
动态字典只是一个包含字典的ExpandoObject.所以仍然可以像字典一样访问它.
例如,在MVC中,您可以访问表单属性,如下所示:
var name = Request["name"];
Run Code Online (Sandbox Code Playgroud)
要么
var name = Request.Form["name"];
Run Code Online (Sandbox Code Playgroud)
当请求进入Nancy时,您可以通过点表示法访问它.或者通过类索引器.
var name = parameters.name;
var name = parameters["name"];
Run Code Online (Sandbox Code Playgroud)
当您发送具有不能以点表示法使用的值的查询字符串或表单名称时,这很方便.
var firstName = parameters["first-name"];
Run Code Online (Sandbox Code Playgroud)
这些值也是动态的,因此它可以由嵌套对象组成.这允许你做以下的事情:
var firstName = parameters.contact.firstname;
Run Code Online (Sandbox Code Playgroud)
因此,如果您将JSON有效负载传递给请求,则可以使用点表示法访问整个结构.
但是,您可能会发现大多数使用Nancy的开发人员只能使用此方法访问Route值或QueryString值.
Get["/products/{id:int}/"] = parameters => {
int id = parameters.id;
};
Run Code Online (Sandbox Code Playgroud)
回到最初的问题:
有博客文章或任何doco:没有.
它为什么存在:对于糖语法.
我可以将它用于我想要的东西:绝对是!
你能告诉我如何使用它:不,但它应该不难.只要看看南希的模型绑定就可以搞清楚.这不是太难.
只是根据OP的答案进行编辑.
当您访问点表示法时,续点符号将仅适用于其他动态类型.
这意味着使用var会因为方式var而导致异常,dynamic并由编译器处理.
当你这样做时:
var person = parameters.person;
var name = person.name;
Run Code Online (Sandbox Code Playgroud)
parameters当前dynamic和实现TryGetMember,这内部查找值的字典并尝试返回值.
var为person变量定义对象时.编译器假定对象之后存在任何内容,因此它name在person变量上查找.
既然name不存在就会成为person它的一员.
要解决此问题,必须将变量指定为dynamic.所以这个例子变成了:
dynamic person = parameters.person;
var name = person.name;
Run Code Online (Sandbox Code Playgroud)
这会奏效.
| 归档时间: |
|
| 查看次数: |
1883 次 |
| 最近记录: |