Asp.net web api Web API序列化/反序列化派生类型
我有一个Web API,它返回一个对象列表,当客户端传递Accept application/json时,我希望我的全局注册json格式化程序在序列化过程中包含派生类型的TypeNameHandling。然而这不起作用,我不明白为什么这不起作用 我的对象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
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都是可能的字符串的内容是什么?