2013-08-04 136 views
1

好吧,所以我对WCF和C#都很陌生,对我来说是如此的光鲜。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,并且不返回任何内容。没有错误或任何事情,但没有结果。我怎样才能达到我想要的?一个包含动物回归集的列表并不重要。

回答

5

尝试添加KnownTypeAttributeAnimal类每个子类,你想有连载:

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

这个工作!但我确实得到了一个json属性,像这样:“__type”:“Snake:#AnimalDatabase.Snakes”。你知道如何去除这个? –

+0

数据来自数据库,但我没有任何属性名为__type –

+0

@Hasslarn这是'DataContractJsonSerializer'区分不同C#类的副作用。如果不写一个可以完成的不同的序列化程序,我不认为你可以完成,但这是相当数量的工作。 –

相关问题