2

我正在使用 MVC ApiController 为我的网站创建 API。

我有一个基类ThinDevice,其中包含Device. 在我的 API 中,我只想序列化属于的属性,ThinDevice但是,尽管我进行了强制转换,并且ThinDevice在我序列化 a 时将其用作返回类型,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;
    }
}
4

1 回答 1

2

这种行为是预期的。您可以查看此问题以获取详细信息。

选项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 序列化,只包含您想要的数据,但这可能很困难。

于 2015-06-09T14:54:06.537 回答