WCF返回包含派生类的基类对象的列表

本文关键字:基类 列表 对象 返回 包含 派生 WCF | 更新日期: 2023-09-27 18:26:33

我有一个返回所有蛇的函数。看起来像这样,工作正常:

// Function that returns JSON list of snakes
public List<Snake> GetSnakes()
{
    var snakes = new List<Snakes>();
    snakes.Add(new Snake { Length = "10.2" } );
    return snakes;
}

现在我有一群不同性质的动物,我不想为每一只动物列出清单。我想要这样的东西:

public class AnimalService : IAnimalService
{
    private List<Animal> animals = new List<Animals>();
    public List<Animal> getSnakes()
    {
        animals.Add(new Snake { Name = "Snake" } );
        return animals;
    }
    public List<Animal> getPigs()
    {
        animals.Add( new Pig { Weight = "100" } );
        return animals;
    }
}

但这行不通。当我将派生类添加到动物列表中时,WCF服务将停止为该函数生成JSON,并且不返回任何内容。没有错误或任何东西,但没有结果。我怎样才能实现我想要的?一个包含返回动物集合的列表,无论是哪种类型。

WCF返回包含派生类的基类对象的列表

尝试为您想要序列化的每个子类向Animal类添加一个KnownTypeAttribute

[DataContract]
[KnownType(typeof(Snake))]
[KnownType(typeof(Pig))]
public class Animal 
{
}