Asp.net web api Web API序列化/反序列化派生类型

Asp.net web api Web API序列化/反序列化派生类型,asp.net-web-api,json.net,xml-serialization,xml-deserialization,json-deserialization,Asp.net Web Api,Json.net,Xml Serialization,Xml Deserialization,Json Deserialization,我有一个Web API,它返回一个对象列表,当客户端传递Accept application/json时,我希望我的全局注册json格式化程序在序列化过程中包含派生类型的TypeNameHandling。然而这不起作用,我不明白为什么这不起作用 我的对象 public class BaseClass { public int Id { get; set; } } public class SubClass : BaseClass { public string SubClas

我有一个Web API,它返回一个对象列表,当客户端传递Accept application/json时,我希望我的全局注册json格式化程序在序列化过程中包含派生类型的TypeNameHandling。然而这不起作用,我不明白为什么这不起作用

我的对象

public class BaseClass 
{
    public int Id { get; set; }
}

public class SubClass : BaseClass
{
    public string SubClassProp { get; set; }
}

public class SubClassA : SubClass
{
    public string SubClassAProp { get; set; }
}

public class SubClassB : SubClass
{
   public string SubClassBProp { get; set; }
}
public static void Register(HttpConfiguration config) 
{
   var formatters = GlobalConfiguration.Configuration.Formatters;
   var jsonFormatter = formatters.JsonFormatter;
   var settings = jsonFormatter.SerializerSettings;
   settings.Formatting = Formatting.Indented;
   settings.NullValueHandling = NullValueHandling.Ignore;
   settings.TypeNameHandling = TypeNameHandling.Auto;
}
WebApiConfig

public class BaseClass 
{
    public int Id { get; set; }
}

public class SubClass : BaseClass
{
    public string SubClassProp { get; set; }
}

public class SubClassA : SubClass
{
    public string SubClassAProp { get; set; }
}

public class SubClassB : SubClass
{
   public string SubClassBProp { get; set; }
}
public static void Register(HttpConfiguration config) 
{
   var formatters = GlobalConfiguration.Configuration.Formatters;
   var jsonFormatter = formatters.JsonFormatter;
   var settings = jsonFormatter.SerializerSettings;
   settings.Formatting = Formatting.Indented;
   settings.NullValueHandling = NullValueHandling.Ignore;
   settings.TypeNameHandling = TypeNameHandling.Auto;
}
Web API控制器

public class MyController : ApiController
{
    [HttpGet]
    public async Task<IList<BaseClass>> GetClasses() 
    {
       return new List<BaseClass>
              {
                 new SubClassA 
                 { 
                    Id = 1, 
                    SubClassProp = "SubClass", 
                    SubClassAProp = "SubClassAProp"
                 },
                 new SubClassB
                 {
                    Id = 2, 
                    SubClassProp = "SubClass", 
                    SubClassBProp = "SubClassBProp"
                 }
              };
    }
}
公共类MyController:ApiController
{
[HttpGet]
公共异步任务GetClasses()
{
返回新列表
{
新亚纲
{ 
Id=1,
SubClassProp=“SubClass”,
subassaprop=“subassaprop”
},
新亚类B
{
Id=2,
SubClassProp=“SubClass”,
SubClassBProp=“SubClassBProp”
}
};
}
}
来自同一解决方案中API客户端的调用

var client = new HttpClient() { BaseAddress = new Uri("uri goes here...")}
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var resp = await client.GetAsync("uri goes here..."));
var jsonContent = await resp.Content.ReadAsStringAsync();

var ListOfClasses = JsonConvert.DeserializeObject<IList<BaseClass>>(jsonContent, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto });
var-client=new-HttpClient(){BaseAddress=new-Uri(“Uri在这里…”)}
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
var resp=await client.GetAsync(“uri在这里…”);
var jsonContent=await resp.Content.ReadAsStringAsync();
var ListOfClasses=JsonConvert.DeserializeObject(jsonContent,新的JsonSerializerSettings{TypeNameHandling=TypeNameHandling.Auto});
我希望得到一个元素,它是subassa,另一个是subassb,但两者都是基类

我还希望能够在Post方法中将json反序列化为对象


这对于json和xml都是可能的

字符串的内容是什么?