1

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() メソッドを維持できれば幸いです。

配列内の派生型で機能しないとは信じられません。これを有効にするには、何らかの属性またはハックが必要です。

または、私は本当に本当に間違ったことをしています..

どうも !

4

0 に答える 0