2010-07-21 64 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值(但是您想要处理该值)那些包含您的空指示符值的属性/字段。