Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用ServiceStack.Text将Json反序列化为动态对象_C#_Asp.net_Asp.net Mvc_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack Text - Fatal编程技术网 servicestack-text,C#,Asp.net,Asp.net Mvc,servicestack Text" /> servicestack-text,C#,Asp.net,Asp.net Mvc,servicestack Text" />

C# 使用ServiceStack.Text将Json反序列化为动态对象

C# 使用ServiceStack.Text将Json反序列化为动态对象,c#,asp.net,asp.net-mvc,servicestack-text,C#,Asp.net,Asp.net Mvc,servicestack Text,我正在使用将json反序列化为动态对象 尝试反序列化以下json时遇到错误: { "responseHeader":{ "status":0, "QTime":3, "params":{ "q":"*:*", "indent":"true", "wt":"json"}}, "response":{"numFound":1,"start":0,"docs":[ { "id":"1", "

我正在使用将json反序列化为动态对象

尝试反序列化以下json时遇到错误:

{
  "responseHeader":{
    "status":0,
    "QTime":3,
    "params":{
      "q":"*:*",
      "indent":"true",
      "wt":"json"}},
  "response":{"numFound":1,"start":0,"docs":[
      {
        "id":"1",
        "title":["test"],
        "_version_":1480260331707039744}]
  }}
上面的json是一个字符串,这就是我试图反序列化它的方式:

DynamicJson dyn = DynamicJson.Deserialize(json);    
var response = dyn.response;
但是我得到一个错误,它说:dyn不包含“响应”的定义。


dyn
返回一种类型的
ServiceStack.DynamicJson
,其值如下(来自调试器):


根据这里的答案:就是这样做的,但是我在这里做错了什么?

即使
DynamicJson.Deserialize
实际上返回了
DynamicJson
的一个实例,您必须将
dyn
声明为
dynamic
来动态处理它:

dynamic dyn = DynamicJson.Deserialize(json);    
var response = dyn.response;
根据
DynamicObject
(其
DynamicJson
继承自)的文档:

在C#中,要为从DynamicObject类派生的类的实例启用动态行为,必须使用dynamic关键字

如果表达式的类型不是
动态的
,静态绑定仍然会发生,这就是您看到错误的原因

dynamic dyn = DynamicJson.Deserialize(json);    
var response = dyn.response;