我正在使用MVC ApiController为我的网站创建一个API。
我有一个基类ThinDevice
,其中包含Device
的一部分信息。在我的API中,我只想序列化属于ThinDevice
的属性,但是,尽管我进行了转换,并且在序列化ThinDevice
时使用Device
作为返回类型,它始终序列化整个对象< / p>
[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;
}
}
答案 0 :(得分:2)
此行为是预期的。您可以查看此question了解详细信息。
选项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序列化,但这可能很困难。