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

标签 c# json wcf

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

// 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 并且不返回任何内容。没有错误或任何东西,但没有结果。我怎样才能达到我想要的?一个包含返回的动物集的列表,与什么类型无关。

最佳答案

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

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

关于c# - WCF 返回包含派生类的基类对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18046222/

相关文章:

c# - 在自定义模拟类中创建返回 IDisposable 的方法

c# - MVC Razor View 嵌套 foreach 的模型

python - 使用 BeautifulSoup4 在 Python 中存储标签数据

c# - WCF 中的 JsonConvert.DeserializeObject 和 "d"包装器

android - 如何在 Android 中使用 WCF

c# - WCF 4 和 NetTcpBinding

c# - 将 docker 容器端口暴露给其他机器

c# - 我可以使用 WCF 服务进行上传和下载吗?

java - jackson 解码问题

java - 图像文本按钮LibGDX