0

ASP.NET MVC 4 アプリケーションで、「フィールド」の配列を含む外部サーバーから JSON 応答を取得します。各フィールドは個別の型であり、その型の値の配列が含まれています。

そのJSONをDynamicObjectにデシリアライズして、個々の値のプロパティにアクセスできるようにするか、「ValueBase」クラスから派生したどのクラスが別のプロパティにアクセスする必要があるかを決定する、ある種の子クラスセレクターが必要です個別値オブジェクトのプロパティ。

私が言いたいことを理解していただければ幸いです...少し複雑です。

私はすでにそれを DynamicObject (DynamicObject から派生したクラス) にデシリアライズしようとしました。しかし、ビューでそのオブジェクトの動的プロパティにアクセスすると、表示したいプロパティが存在しないというエラー メッセージが表示されます。

では、DynamicObject から派生するクラスは、JSON コードによって提供される個々の異なる「値」プロパティへのアクセスを受け入れて許可するために、どのように見える必要があるのでしょうか?

それが不可能だったり、間違った方法で行ったりする場合、適切な型選択クラスをどのように実装する必要がありますか?

どうもありがとう!

4

1 に答える 1

0

一応自己解決しました。

返された JSON オブジェクト (より正確には JSON 配列) を特定のクラスに直接変換する代わりに、動的としてフェッチし、オブジェクトが実際に必要とする別のクラスのインスタンスのコレクションを含むクラスのコンストラクターに渡します。 (とにかく、Webサービスから返された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;
    }
  }
}

Member-class 自体には、動的パラメーターも必要とする同様のコンストラクターが含まれています。また、アイテム内の値に応じて「自分自身を構築」します。

これを達成するためのより簡単な方法または「王道」があれば、さらにアドバイスをいただければ幸いです。

于 2012-09-07T14:41:45.997 に答える