我正在使用ServiceStack.Text将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
类型(来自调试器):
{"response_header":"{\n \"status\":0,\n \"QTime\":0,\n \"params\":{\n \"q\":\"*:*\",\n \"size\":\"0\",\n \"indent\":\"True\",\n \"start\":\"0\",\n \"wt\":\"json\",\n \"return-fields\":\"\"}}","response":"{\"numFound\":1,\"start\":0,\"docs\":[\n {\n \"id\":\"1\",\n \"title\":[\"test\"],\n \"_version_\":1480260331707039744}]\n }"} ServiceStack.DynamicJson
根据这里的答案:Using ServiceStack.Text to deserialize a json string to object它是如何完成的,但我在这里做错了什么?
答案 0 :(得分:2)
即使DynamicJson.Deserialize
确实返回DynamicJson
的实例,您也必须将dyn
声明为dynamic
才能动态处理它:
dynamic dyn = DynamicJson.Deserialize(json);
var response = dyn.response;
根据DynamicObject
的文档(DynamicJson
继承自:)
在C#中,要为从DynamicObject类派生的类的实例启用动态行为,必须使用动态关键字。
如果表达式不是dynamic
类型,静态绑定仍会发生,这就是您看到错误的原因。