自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

WCF序列化依賴屬性詳細介紹

開發(fā) 開發(fā)工具
WCF序列化依賴屬性對于剛剛接觸WCF開發(fā)框架不久的朋友來說是一個比較復雜的知識概念。在這里我們將會為大家詳細介紹這一方面的知識。

WCF開發(fā)框架作為一款功能強大的跨平臺解決方案,其中包含的操作方法和各種知識是相當繁雜的。我們需要不斷的去熟練操作,才能掌握這一知識點。我們先來了解下WCF序列化依賴屬性相關概念。#t#

眾所周知.NetFramework中存在著兩種依賴屬性,他們也分別集成著不同但名稱相同的依賴對象:

System.Windows.DependencyProperty:System.Windows.DependencyObject

System.Workflow.ComponentModel.DependencyProperty:System.Workflow.ComponentModel.DependencyObject

System.Window.DependencyProperty主要用于WPF中,我們可以以注冊的形式聲明這種‘特別’的屬性,聲明中可以設置Metadata,PropertyChangeCallBack...等等,讓我能用幾句簡單的代碼來實現強大的WPF操作。

 

System.Workflow.ComponentModel.DependencyProperty相對于前者,是一個簡化版本,只可以在聲明中可以設置Metadata,但對于WorkflowFoundation這就足夠用了。

 

兩種依賴屬性對各自的技術,都不同程度的提供了很好的支持,讓我們在實際開發(fā)中能夠更高效的書寫代碼,但是我們能不能像一般的屬性那樣隨意聲明,并運用?至少在WCF序列化依賴屬性中我們很難使用這種特殊的屬性。

以工作流中的System.workflow.ComponentModel.DependencyObject為例

如果我們想像一般自定義類那樣,在聲明完DataContract和DataMember后便可在基于WCF的應用程序中應用,會遇到UserData這個繼承于IDictionary的討厭屬性在WCF中無法序列化。如:

 

  1. [DataContract]  
  2. public class WorkFlowParameter : 
    DependencyObject  
  3. {  
  4. public static readonly Dependency
    Property 
    IDProperty =  
  5. DependencyProperty.Register("ID", 
    typeof(Guid), typeof(WorkFlowParameter),
    new PropertyMetadata("UserDefinedProperty"));  
  6. [DataMember]  
  7. public Guid ID  
  8. {  
  9. get { return (Guid)GetValue(IDProperty); }  
  10. set { SetValue(IDProperty, value); }  
  11. }  

 

 

像這樣一個看起來很平常的類,在WCF序列化依賴屬性應用中,我們只能無語了。

 

為了使得包含依賴屬性的自定義類能在WCF中正常使用

我們可以以下面的步驟自己動手寫序列化方法

1.在自定義類中繼承ISerializable接口,并實現構造函數以及GetObjectData方法

如:

 

  1. public class WorkFlowParameter :
     DependencyObject,ISerializable  
  2. {  
  3. //在Deserialize時使用  
  4. public WorkFlowParameter(SerializationInfo
     info, StreamingContext context)   
  5. {  
  6. ID = new Guid (info.GetString("ID"));  
  7. ParameterName = info.GetString("ParameterName");  
  8. }  
  9. //在Serialize時調用,把除了UserData
    以外我們自定義的屬性添加進來進行序列化  
  10. public void GetObjectData(SerializationInfo 
    info, StreamingContext context)  
  11. {  
  12. IList<DependencyProperty> properties = 
    DependencyProperty.FromType(this.GetType());  
  13. if(properties.Count > 0)  
  14. {  
  15. foreach(DependencyProperty property
     in properties)  
  16. {  
  17. if(property.Name != "UserData")  
  18. {  
  19. info.AddValue(property.Name,
     GetValue(property));  
  20. }  
  21. }  
  22. }  
  23. }  

 

 

2.經過我們自定義序列化后,我們可以正常使用了

 

如果你遇到類型XXXX不能為 ISerializable,且不能具有 DataContractAttribute 屬性這時候我們需要在WCF序列化依賴屬性中,我們可以把類中的

 

  1. [DataContract]去掉  
  2. [DataContract]//去掉  
  3. public class Work
    FlowParameter :
     DependencyObject 

 

 

 

再試試,大功告成了。呵呵。

責任編輯:曹凱 來源: 博客園
相關推薦

2009-11-09 15:06:34

WCF序列化

2009-11-05 16:34:37

WCF序列化

2010-01-08 11:11:38

JSON 序列化

2010-02-23 13:03:34

WCF序列化

2010-02-22 16:00:22

WCF序列化

2009-12-21 16:52:02

WCF序列化

2010-02-24 17:07:26

WCF序列化引擎

2010-03-19 15:54:21

Java Socket

2009-11-05 14:25:36

WCF Data Co

2022-08-06 08:41:18

序列化反序列化Hessian

2009-11-09 17:30:20

WCF元數據

2009-12-22 15:02:40

WCF限流

2011-06-01 15:05:02

序列化反序列化

2009-08-24 17:14:08

C#序列化

2009-12-08 16:09:02

WCF消息

2010-02-24 17:41:05

WCF集合反序列化

2023-12-13 13:49:52

Python序列化模塊

2009-08-06 11:16:25

C#序列化和反序列化

2011-05-18 15:20:13

XML

2018-03-19 10:20:23

Java序列化反序列化
點贊
收藏

51CTO技術棧公眾號