Json.Net在ApiController中序列化派生类而不是基类
本文关键字:基类 派生 序列化 Net ApiController Json | 更新日期: 2023-09-27 17:54:04
我正在使用MVC ApiController为我的网站创建一个API。
我有一个基类ThinDevice
,它包含Device
的信息子集。在我的API中,我只想序列化属于ThinDevice
的属性,但是,尽管我进行了转换,并使用ThinDevice
作为返回类型,当我序列化Device
时,它总是序列化整个对象
[HttpGet]
public ThinDevice Get(string id)
{
// This returns Device
var device = this.dataService.GetDevice(id);
if (device != null)
{
// I only want to serialize properties in ThinDevice
return device as ThinDevice;
}
}
这种行为是预期的。你可以查看这个问题的详细信息。
选项1:我建议手动创建一个ThinDevice
的实例,或者如果这个类是抽象的,那么为响应引入一些单独的模型。
public class ThinDevice
{
public string A { get; set; }
}
public class Device1 : ThinDevice
{
public string B { get; set; }
}
[HttpGet]
public ThinDevice Get()
{
return GetDeviceResponse(new Device1 { A = "A", B = "B" });
}
private ThinDevice GetDeviceResponse<T>(T device) where T : ThinDevice
{
return new ThinDevice
{
A = device.A
};
}
这段代码不是很好(特别是如果你有复杂的对象结构)。
选项2:您可以实现自定义JSON和XML序列化,只包含您想要的数据,但这可能很困难。