0

在 ASP.NET MVC 4 应用程序中,我从包含“字段”数组的外部服务器获得 JSON 响应。每个字段都有一个单独的类型,并包含该类型值的数组。

我想将该 JSON 反序列化为 DynamicObject 以便我可以访问单个值属性,或者我需要某种子类选择器来决定需要从“ValueBase”类派生的哪个类来访问不同的单个值对象的属性。

我希望你明白我的意思……这有点复杂。

我已经尝试将其反序列化为 DynamicObject(即从 DynamicObject 派生的类)。但是当我在视图中访问该对象的动态属性时收到错误消息,我想显示的属性不存在。

那么,从 DynamicObject 派生的类如何必须接受并授予对 JSON 代码提供的各个不同“值”属性的访问权限?

如果这是不可能的或错误的方法,我将如何实现一个合适的类型选择器类?

非常感谢!

4

1 回答 1

0

我自己有点解决了。

我没有将返回的 JSON 对象(更准确地说是 JSON 数组)直接转换为特定的类,而是将其作为动态对象获取,并将其提供给包含另一个类的实例集合的类的构造函数,该对象实际上应该是(无论如何我都会从网络服务返回一个 JSON 数组)。在集合类的构造函数中,我根据 JSON 对象的值来决定新对象将是哪个继承类,并将其放入集合中。是的,我不知何故走那条路,但它有效。

看起来像这样:

public CollectionClass(dynamic dyn)
{
  foreach(var item in dyn.items) {
    switch((string)item.external_id) { // might have used a Dictionary instead but...
      case "member":
        this._collection.Add(new Member(item));
        break;
      case "date":
        this._collection.Add(new Date(item));
        break;
      default: break;
    }
  }
}

成员类本身包含一个类似的构造函数,它也需要一个动态参数。它还根据item内部的值“建立自己” 。

如果有任何更简单的方法或实现这一目标的“皇家之路”,我将不胜感激任何进一步的建议。

于 2012-09-07T14:41:45.997 回答