我可以使用ASP.net Web Api和MVC 3默认使用Json.Net反序列化吗?

我有一个MVC 3 Web应用程序/ API我正在使用,我非常厌倦默认的Microsoft序列化。 MVC 4中新的ASP.net Web Api的一大承诺是它默认使用JSON.net反序列化。 好吧,我很乐意默认使用JSON反序列化,而不是弄乱WCF客户端。 我遇到的一个问题是由于各种原因我无法转换为MVC 4。

所以我的问题是我仍然可以使用默认情况下使用MVC 3进行Json.net反序列化吗?

我特别想做的是实现一个Json转换器来处理我要反序列化的对象的inheritance。 因此,如果我发送此Json,API将知道要返回的对象类型。

我按照这里的文章在MVC 3应用程序中创建了一个ASP.net web api。

http://wcf.codeplex.com/wikipage?title=Getting%20started:%20Building%20a%20simple%20web%20api

所以,如果我发送JSON …

[{ "WokerId" : "456", "Company" : "ACompany", "DOB" : "asdasd" }, { "ContactId" : "123", "Name" : "Johnny Funtime", "DOB" : "asdasd" }] 

对于此服务合同/ API,我将得到适当的回复。

 [ServiceContract] public class ContactsApi { [WebInvoke(Method = "POST", UriTemplate = "", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] public List Get(List input) { return input; } } public class Worker : Person { public int WorkerID { get; set; } public string Company { get; set; } } public class Contact : Person { public int ContactId { get; set; } public string Name { get; set; } } [JsonConverter(typeof(PersonConverter))] public abstract class Person { public string DOB { get; set; } } public class PersonConverter : JsonConverter { public override bool CanWrite { get { return false; } } protected Person Create(Type objectType, JObject jObject) { if (!string.IsNullOrEmpty(jObject.Value("Company"))) { return new Worker(); } else if (!string.IsNullOrEmpty(jObject.Value("Name"))) { return new Contact(); } return null; } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { //base.WriteJson(writer, value, serializer); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; var jObject = JObject.Load(reader); var target = Create(objectType, jObject); serializer.Populate(jObject.CreateReader(), target); return target; } public override bool CanConvert(Type objectType) { return typeof (Person).IsAssignableFrom(objectType); } } 

此代码当前抛出一个实现错误(因为person是抽象的),但我相信如果我使用Json.Net反序列化,这应该有效。

在此先感谢帮助人员。