2013-08-04 137 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#類的副作用。如果不寫一個可以完成的不同的序列化程序,我不認爲你可以完成,但這是相當數量的工作。 –

相關問題