C# 使用ServiceStack.Text将Json反序列化为动态对象
我正在使用将json反序列化为动态对象 尝试反序列化以下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", "
{
"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;