Json.Net在ApiController中序列化派生类而不是基类

时间:2015-06-08 10:43:19

标签: c# json serialization asp.net-apicontroller

我正在使用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;
    }
}

1 个答案:

答案 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序列化,但这可能很困难。

相关问题