JSON経由でMVC4コントローラーとの基本的な通信を試みています。両方のポイントでデータを送受信する必要があります。クライアントの場合、RestSharp を使用しています。
私の問題は、サーバーに送信されるときに、TheObjectIWantToTransfer のリストに値がないことです。そのため、コントローラー側でも Json.NET をいじり始めました。
これらはクラスの例で、転送したいものがどのように見えるかです。
public class TheObjectIWantToTransfer
{
public int JustAGeneralNumber { get; set; }
[JsonProperty(TypeNameHandling = TypeNameHandling.All)]
public List<MyBaseType> Data { get; set; }
public TheObjectIWantToTransfer()
{
Data = new List<MyBaseType>();
}
}
// class of the list
[KnownType(typeof(MyDerivedTypeA))]
[KnownType(typeof(MyDerivedTypeB))]
public abstract class MyBaseType
{
public string SomeGeneralStuff { get; set; }
}
public class MyDerivedTypeA : MyBaseType
{
public int Foo { get; set; }
}
public class MyDerivedTypeB : MyBaseType
{
public int Bar { get; set; }
public string IamYourFather { get; set; }
}
私も使ってみました
var settings = new JsonSerializerSettings()
{TypeNameHandling = TypeNameHandling.All};
JsonConvert シリアライズ/デシリアライズを使用。出力は変更されましたが、まだ機能していません。彼は参照された型を見つけることができませんでした。コントローラーで TypeNameHandling.All Json.NET オブジェクトを受け取る方法がわかりません。TypeNameHandling.All でシリアル化してクライアントにデータを送信できる JsonNetResult を作成しました。しかし、Json.NETで受信/逆シリアル化できませんか?
public JsonNetResult MyAction(MyClassType blub)
{
// blub ?? is beeing deserialized by the default JSON deserializer of MVC.
}
解決策が必要です。可能であれば、MVC の通常の Json() メソッドを維持できれば幸いです。
配列内の派生型で機能しないとは信じられません。これを有効にするには、何らかの属性またはハックが必要です。
または、私は本当に本当に間違ったことをしています..
どうも !