C# 默认情况下,我可以将Json.Net反序列化与ASP.Net Web Api和MVC 3一起使用吗?
我正在使用一个MVC3Web应用程序/API,我对默认的Microsoft序列化感到非常厌倦。MVC4中新的ASP.net Web Api的最大承诺是默认情况下使用JSON.net反序列化。我希望在默认情况下使用JSON反序列化,而不是干扰WCF客户机。我遇到的一个问题是,由于各种原因,我无法转换为MVC4 所以我的问题是,在MVC 3中,默认情况下,我仍然可以使用Json.net反序列化吗 我具体要做的是实现一个Json转换器来处理我正在反序列化的对象的继承。因此,如果我发送这个Json,API就会知道返回什么类型的对象 我跟随本文在MVC3应用程序中创建了一个ASP.NETWebAPI 所以如果我发送JSONC# 默认情况下,我可以将Json.Net反序列化与ASP.Net Web Api和MVC 3一起使用吗?,c#,asp.net-mvc,wcf,json.net,C#,Asp.net Mvc,Wcf,Json.net,我正在使用一个MVC3Web应用程序/API,我对默认的Microsoft序列化感到非常厌倦。MVC4中新的ASP.net Web Api的最大承诺是默认情况下使用JSON.net反序列化。我希望在默认情况下使用JSON反序列化,而不是干扰WCF客户机。我遇到的一个问题是,由于各种原因,我无法转换为MVC4 所以我的问题是,在MVC 3中,默认情况下,我仍然可以使用Json.net反序列化吗 我具体要做的是实现一个Json转换器来处理我正在反序列化的对象的继承。因此,如果我发送这个Json,AP
[{
"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<Person> Get(List<Person> 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<string>("Company"))) {
return new Worker();
} else if (!string.IsNullOrEmpty(jObject.Value<string>("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反序列化,这应该可以工作
提前感谢大家的帮助。可能是@Cybermaxs Betclic的重复,这是序列化,而不是反序列化。不知何故,谷歌把我抛到了这个古老的问题上;对于其他疲惫的旅行者和我自己,如果它再次发生:1。链接的被骗者有可怕的答案;肯定有更好的链接。i、 e.2。反序列化是在最新的MVC中自动处理的,它似乎只对发布的内容类型使用默认序列化程序。