モデルにサブクラスがあるASP.NET MVCアクションにJsonをポストするとき、適切にデセル化する方法

私は、MVCコントローラ上の何らかのアクションにJSONを送るとき、そのアクションはアイテムのリストがあるモデルを受け入れるという問題があります。それらのアイテムは、共通の抽象クラスのすべてのサブクラスであるため、いくつかの異なるオブジェクトにすることができます。

JSONをデタラライズするときに、オブジェクトを正しいタイプに戻す方法を知っているように、JSONを工夫する方法はありますか?

1
JSON.NETを使用していない場合は、注釈や設定を使用してサブクラス解析を指定できます。
追加された 著者 ryudice,
だから、json.netでは、それをバリュープロバイダーとしてどのようにフックし、サブクラス化されたオブジェクトをデシリアライズして扱うのですか?
追加された 著者 Keith Nicholas,

1 答え

    void Main()
{
System.Web.Script.Serialization.JavaScriptSerializer serializer = new   System.Web.Script.Serialization.JavaScriptSerializer();
 MainModel model = new MainModel(){SimpleProperty = "I am simple property",   ComplexProperty = new ComplexProperty(){Foo="test", Bar="data"}};
   var result = serializer.Serialize(model);

}

public class MainModel
  {
      public string SimpleProperty {get;set;}
      public ComplexProperty ComplexProperty {get;set;}
}

 public class ComplexProperty 
  {
public string Bar {get;set;}
public string Foo {get;set;}

  }

シリアライゼーションの結果は次のようになります。 {"SimpleProperty": "私は単純なプロパティ"、 "ComplexProperty":{"Bar": "data"、 "Foo": "test"}}

希望が助けてくれる!

0
追加された
これは質問が求めていたものではありません...
追加された 著者 Keith Nicholas,
いいえ、必要だったのは、サブクラスを使ってjsonを非直列化できるオブジェクトグラフを持つ方法でした....たとえば、基本クラスComplexがあり、ComplexPropertyが継承され、EvenMoreComplexという別のクラスがあるこれも継承します。その後、MainModelでは、3つのタイプのいずれかになる可能性があるComplexへの参照があります。 Json.Netには型情報をjsonにシリアライズする機能があります。逆シリアル化すると、正しい型のオブジェクトが再作成されます
追加された 著者 Keith Nicholas,
言及するのを忘れてしまったのは、var query = serializer.Deserialize (result);
追加された 著者 Aadil,
ああ、私はそれが私の元の答えで逃したが、後でコメントに投稿した正しい元のタイプにそれを非直列化する方法を尋ねていると思った。それはあなたが探していたものですか?
追加された 著者 Aadil,