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 对象。我创建了 JsonNetResult,它使我可以使用 TypeNameHandling.All 进行序列化并将数据发送到客户端。但我无法使用 Json.NET 接收/反序列化?

 public JsonNetResult MyAction(MyClassType blub)
 {
     // blub ?? is beeing deserialized by the default JSON deserializer of MVC.
 }

我只需要一个解决方案。如果可能的话,我很乐意保留 MVC 的正常 Json() 方法。

我不敢相信它不适用于数组中的派生类型。必须有某种属性或破解来激活它。

或者我正在做一些疯狂的事情,真的非常错误..

谢谢 !

4

0 回答 0