Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 默认情况下,我可以将Json.Net反序列化与ASP.Net Web Api和MVC 3一起使用吗?_C#_Asp.net Mvc_Wcf_Json.net - Fatal编程技术网

C# 默认情况下,我可以将Json.Net反序列化与ASP.Net Web Api和MVC 3一起使用吗?

C# 默认情况下,我可以将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

我正在使用一个MVC3Web应用程序/API,我对默认的Microsoft序列化感到非常厌倦。MVC4中新的ASP.net Web Api的最大承诺是默认情况下使用JSON.net反序列化。我希望在默认情况下使用JSON反序列化,而不是干扰WCF客户机。我遇到的一个问题是,由于各种原因,我无法转换为MVC4

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

我具体要做的是实现一个Json转换器来处理我正在反序列化的对象的继承。因此,如果我发送这个Json,API就会知道返回什么类型的对象

我跟随本文在MVC3应用程序中创建了一个ASP.NETWebAPI

所以如果我发送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<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中自动处理的,它似乎只对发布的内容类型使用默认序列化程序。