[asp.net]反 Json 序列化成一个具有 ServiceStack.Text 的动态对象

发布时间: 2016/11/12 5:52:08
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我用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

根据这里的答案︰使用 ServiceStack.Text 要反序列化到对象的 json 字符串的如何其完成,但在做什么这里输错了吗?

解决方法 1:

尽管 DynamicJson.Deserialize 实际上返回的实例 DynamicJson ,您必须声明 dyn 作为 dynamic 动态治疗它︰

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

根据文档为 DynamicObject (其中 DynamicJson 从继承):

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

如果该表达式的类型不是 dynamic ,静态绑定仍会发生,这就是为什么你看到的错误。

赞助商