[英]What is a KnownType in WCF
我正在學習wcf。 所以我遇到一個叫做已知類型的wcf屬性。 在這里,我得到了一段不清楚的代碼。
[DataContract]
public class UserAccount {}
[DataContract]
public class Admin : UserAccount {}
[DataContract]
public class Guest : UserAccount {}
[DataContract]
[ServiceKnownType(typeof(Admin))]
[ServiceKnownType(typeof(Guest))]
public class SecurityInfo
{
[DataMember]
private UserAccount user;
}
現在教程說上面的代碼可以正常工作,要么我們將SecurityInfo數據成員設置為Admin或Guest.But,如果沒有提供Admin和Guest的KnownTypeAttribute,反序列化引擎將無法識別Admin和Guest類型並將哭泣。
SecurityInfo和admin&guest類之間的關系是什么? 我真的不明白已知的類型屬性在這里做了什么。 我不熟悉已知的類型屬性,不知道它的作用以及何時使用它。
所以我想請求請讓我理解已知的類型屬性,結果我可以理解它的用途和它是什么....所以來一個簡單的示例代碼,我可以理解什么是已知的類型屬性。 謝謝
(這些是簡化的解釋,說明了概念,而不是WCF中的技術實現)。
當通過網絡發送消息時,例如使用WCF,它被序列化。 換句話說(大多數時候),在文本中。 說XML。 客戶端發送到服務器的XML描述了數據及其結構。
<data>
<SecurityInfo>
<user type="UserAccount">(some further XML data here)</user>
</SecurityInfo>
</data>
收到此代碼后,WCF API會解析XML並嘗試創建您可以在代碼中操作的C#對象。 這是Securityinfo
類的一個實例,其屬性類型為UserAccount
。 但是它如何知道哪個類可以實現?
顯然, <user>
節點在其屬性中保存了類名。 但是如果客戶端發送了像Admin
類這樣的衍生實例呢? 你會收到這樣的東西:
<data>
<SecurityInfo>
<user type="Admin">(some further XML data here)</user>
</SecurityInfo>
</data>
[KnownType]
屬性通知WCF服務“可以”接收此Admin
類型,因為它是等待的UserAccount
類型的子類。
當Admin
子類具有更多屬性時尤為重要,例如public string AdminEmail { get;set; }
public string AdminEmail { get;set; }
。 此屬性也將由客戶端發送。 在進行服務器端解析作業時,WCF服務器會被告知此附加屬性有效,因為Admin
類型是有效的[KnownType]
。
在WCF中使用已知類型來向數據協定序列化程序警告它將需要處理的類型,這對於服務契約的外部節點來說並不是顯而易見的。 例如,如果您有基本類型(在您的情況下是UserAccount),則序列化程序需要知道UserAccount可能具有的2個實際實際類型:Admin或Guest。 根據我的經驗,已知類型通常用於多態類型的集合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.