我正在尝试通过 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() 方法。
我不敢相信它不适用于数组中的派生类型。必须有某种属性或破解来激活它。
或者我正在做一些疯狂的事情,真的非常错误..
谢谢 !