2010-07-21 42 views
2

我收集了大約20,000個需要持久保存到我的數據庫的對象。現在,我不想做20000個插入語句,而想使用XML參數傳遞所有記錄。序列化對象 - 替換值

就序列化對象並將它傳遞給過程而言,我已全部設置好了。然而,我想知道是否有人有一個優雅的方式來做到以下幾點:

在我們的C#代碼庫;我們有一些靜態值在保存到數據庫時表示NULL。例如,如果一個整數等於-1,或者一個DateTime等於DateTime.MinValue;保存NULL。我們有自己的小自定義實現,可以在保存對象時爲我們處理這個問題。

有沒有什麼辦法可以在執行XML序列化時做類似的事情?現在它在XML中輸出-1和DateTime.MinValue。我確實有一個擴展方法(IsNull()),如果保存的值是空默認值,將返回true/false。

有什麼建議嗎?提示與技巧?

+1

如果您使用3.5,爲什麼您使用保留值而不是空值Nulllable '? – 2010-07-21 18:22:46

+0

@Adam:'Nullable '在.NET 2.0中引入 - 不是3.5 – STW 2010-07-21 18:37:10

+0

*現在,我不想使用20000個插入語句,而是使用XML參數傳遞所有記錄。* Whoa there,cowboy!讓我們退後一步,在提交自己的XML之前解決這個問題,看看爲這些查詢設計的BULK INSERT語句:http://msdn.microsoft.com/en-us/library/ms188365.aspx – Juliet 2010-07-21 18:38:32

回答

0

XmlSerializer理解許多不同的屬性;其中之一是DefaultValueAttribute

如果包含,XmlSerializer的只會序列化值檢查,如果實際值與默認值不同,所以你應該需要的是:

[DefaultValue(-1)] 
public int SomeProperty 
{get;set;} 

另外,如果您有沒有考慮過它,採取請查看SqlBulkCopy類,這是一種將大量記錄發送到SQL Server的高性能方法。

0

您可以實施IXmlSerializable來控制對象的XML序列化。特別是,執行WriteXml以替換空值或xsi:null值(但是您想要處理該值)那些包含您的空指示符值的屬性/字段。