2011-02-05 99 views
1

我在週末測試了幾件事情,並且製作了以下自定義對象。WCF上的自定義類對象

int Age; 
    string HairColor; 

時間的緣故,我沒有顯示在這裏,但在類的get/set代碼,它的存在。該類在Winforms應用程序中工作得很好。

現在我想要做的是採取完全相同的類(它駐留在DLL中)並允許WCF服務將其返回給客戶端。

我該怎麼做?我可以只使用WCF服務引用DLL,還是需要做一些特殊的事情?

+0

爲什麼不嘗試它並找出?你已經知道答案。 – 2011-02-05 17:15:51

回答

1

如果你想序列化類,因此它可以被用作一個WCF服務調用的參數,你必須:

  • 要麼使用「隱含的」序列化是WCF具有自.NET 3.5 SP1 - 它與XML序列化程序的工作方式大致相同;所有公共屬性的序列化

,或者如果你需要什麼獲取序列化更多的控制權:

  • 你需要裝飾與[DataContract]屬性(類一級)類(ES)和裝飾的每個項目你希望有序列化(公開與否,屬性或字段)與[DataMember]屬性

的明確裝修用[DataContract]/[的DataMember]屬性有一些明顯的優勢:

  • 可以定義XML命名空間爲您的序列數據類
  • 您可以定義哪些字段和/或你想擁有系列化
  • 可以系列化命名的屬性,例如性能(公共或沒有)你可以給它的數據結構中的另一個名稱將從客戶端發送到服務器
  • 您可以控制其中的字段和屬性是串行
  • 你不需要提供一個無參數的構造函數的順序反序列化

當然,有沒有免費的午餐 - 這意味着你必須去裝飾你想要的WCF方法的參數使用的類和/或返回類型。

+0

嗯,實際上它是從WCF返回給客戶端,客戶端並沒有將它發送給WCF。儘管這可能在未來發生。 – Phillip 2011-02-06 16:55:36

+0

@Philip:沒有什麼區別 - 無論是從服務器發送到客戶端還是其他方式 - 爲了讓WCF知道如何序列化數據,非常需要DataContract。如果你已經有了。.NET類以及需要發送的所有屬性都是您的類上的公共屬性,那麼您應該沒問題 - 只需引用現有的DLL並開始吧! – 2011-02-06 18:02:31

0

創建public類的WCF [ServiceContract]

public Person{ 

    public int Age { get; set; } 
    public string HairColor { get; set;} 
} 

這應被自動序列化。