我知道一個私有的無參數構造函數,但是沒有無參數構造函數的對象呢?是否有可能序列化WCF中沒有無參數構造函數的對象?
我想暴露第三方庫的類型,所以我無法控制類型定義。
如果有什麼方法是最簡單的?例如。我不需要創建子類型。
編輯:
我正在尋找的是類似這裏顯示的自定義級別:http://msdn.microsoft.com/en-us/magazine/cc163902.aspx 雖然我不希望有訴諸流序列化/反序列化。
我知道一個私有的無參數構造函數,但是沒有無參數構造函數的對象呢?是否有可能序列化WCF中沒有無參數構造函數的對象?
我想暴露第三方庫的類型,所以我無法控制類型定義。
如果有什麼方法是最簡單的?例如。我不需要創建子類型。
編輯:
我正在尋找的是類似這裏顯示的自定義級別:http://msdn.microsoft.com/en-us/magazine/cc163902.aspx 雖然我不希望有訴諸流序列化/反序列化。
你真的不能任意類型的序列化;在某些情況下(例如,XmlSerializer
),運行時會公開欺騙屬性的選項。但DataContractSerializer
不允許這樣做。可行的方案:
本質上說,如果事情是不設計系列化,很少框架將讓你序列化它。
我不是WCF專家,但它不太可能支持任意類型的構造函數的序列化。就是因爲他們會傳遞什麼價值觀?您可以傳遞null作爲參考類型,併爲結構傳遞空值。但是,一個類型可以用完全空的數據構造出什麼好?
我覺得你被卡住1 2的選項
就我個人而言,我會去#2。使該類成爲僅數據結構並針對序列化和工廠目的進行優化。
我只是運行一個小測試,使用WCF服務返回一個沒有默認構造函數的基本對象。
//[DataContract]
//[Serializable]
public class MyObject
{
public MyObject(string _name)
{
Name = _name;
}
//[DataMember]
public string Name { get; set; }
//[DataMember]
public string Address { get; set; }
}
這裏的服務是什麼樣子:
public class MyService : IMyService
{
#region IMyService Members
public MyObject GetByName(string _name)
{
return new MyObject(_name) { Address = "Test Address" };
}
#endregion
}
這實際工作,只要爲MyObject要麼是[DataContract]或[Serializable接口。有趣的是,它似乎並不需要客戶端的默認構造函數。有一個相關的帖子在這裏:
How does WCF deserialization instantiate objects without calling a constructor?
不幸的是,第三方框架類型既沒有被標記爲[DataContract],也沒有被標記爲[Serializable]。 – 2009-03-03 06:05:26
這意味着它們不是被設計爲序列化的,所以不要序列化它們。 – 2009-03-03 14:59:41
問題在於庫中有很多類型,我必須將所有類型映射到第三方庫中的一部分類型。 – 2009-03-03 06:04:25