2011-03-22 29 views
3

我正在使用WCF來檢索對象的集合。這些對象是所有類型的ProcedureText,但可以是子類SuspensionText或ResumptionText,它們都從ProcedureText繼承。爲什麼我不能在我的WCF類中使用KnownType屬性?

public class ProcedureText { } 
public class SuspensionText : ProcedureText { } 
public class ResumptionText : ProcedureText { } 

我的OperationContract的指定方法返回ProcedureText對象的數組:

[OperationContract] 
[WebGet(UriTemplate = "procedureTexts")] 
ProcedureText[] GetProcedureTexts(); 

這工作,如果我投我的所有對象ProcedureText但我想繼續使用的子類型的區別。我曾希望使用KnownType屬性來做到這一點,此前預計將它添加到我的ProcedureText類是能夠做到這一點:

[System.Runtime.Serialization.KnownType(typeof(SuspensionTextDto))] 
[System.Runtime.Serialization.KnownType(typeof(ResumptionTextDto))] 
public class ProcedureText { } 

這不起作用,因爲編譯器無法解析System.Runtime.Serialization .KnownType。我從文檔中知道屬性是.NET Framework 4的一部分,但我使用的是.NET Framework 4,這是我的項目的目標框架。

爲什麼我需要設置爲可以使用該屬性?

回答

6

默認情況下不會添加包含該類型的相關DLL。您需要添加一個參考:

System.Runtime.Serialization

用法的文檔中描述:

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.knowntypeattribute.aspx

基本上它是使串行識別的類型。你的服務契約返回一個基類的數組,但是該數組中的類型可以派生出更多的類型。如果序列化程序沒有被告知,序列化會失敗,我認爲。

+0

非常感謝你,亞當。我不應該犯這樣一個愚蠢的錯誤 - 我認爲DLL被引用是因爲Visual Studio識別了命名空間。 – 2011-03-22 14:32:00

相關問題