2010-11-17 66 views
1

我一直在使用SubSonic 2一段時間,但是當我開始一個新項目時,我想升級到3.在我的舊項目中,我使用了自定義非 - 可持續的黑客來序列化Web服務的東西。我真的想找到一個更優雅的解決方案。我正在使用Mono,因此我需要保留在已實現的類中,例如, DataContractSerializer可能沒有了。儘管如此,ASMX仍然希望在支持穩定後立即升級到WCF。 Moonlight/Silverlight將成爲最初的客戶。 JSON/protobuf在未來...使用SubSonic生成類的選擇性序列化

標準的Xml序列化程序是選擇退出,所以我需要一些方法來控制它。這使我到IXmlSerializable。我對SS的模板並不熟悉,但似乎編輯這些模板會讓我生成必要的序列化代碼,以便不觸及層次結構鏈的其餘部分。這是一個好主意嗎」?

我很想使用SS的POCO支持,但我不認爲它支持複雜類型或數組。

其他想法/選項?

回答

1

IXmlSerializable是國際海事組織比有點尷尬得到正確的。請注意,如果您自己處理XmlSerializer代碼,則可以使用接受XmlAttributeOverrides的構造函數在運行時覆蓋所有內容(但如果使用此代碼,則應緩存並重新使用XmlSerializer實例,否則它將像篩子一樣泄漏)。

您簡要提及protobuf;注意:protobuf-net(即使是在V1)允許您在級別添加會員級的序列數據,因此您可以在一個分部類旁邊一個生成的類型的信息:

// file 1 
partial class GeneratedClass 
{ 
    public int Foo { get; set; } 
    public string Bar { get; set; } 
} 
// file 2 
[ProtoPartialMember(1, "Foo")] 
[ProtoPartialIgnore("Bar")] 
partial class GeneratedClass {} 
+0

感謝馬克,大風扇你的protobuf實現,瘋狂的快速。儘管我可以手動控制序列化,但最終結果是其他人也可以使用Web服務。我希望有一個更自動化的方法,例如用戶將看到一個沒有提到SS層次結構其餘部分的XSD/WSDL。然後他們從中產生他們的類,等等。 – joe 2010-11-17 20:16:42

+0

@joe - 在這種情況下,我建議您簡單地創建一個單獨的DTO層,它與* SS類型*類似,但在您的直接命令下。 – 2010-11-17 20:25:22

+0

這是我原來的解決方法。 :)雖然我確實是用手做的,但這是我無法承受的。我想這可能是相當自動的SS模板呃?我會嘗試一下併發布結果。 – joe 2010-11-17 20:34:12