代码之家  ›  专栏  ›  技术社区  ›  Jim B

序列化对象-替换值

  •  2
  • Jim B  · 技术社区  · 14 年前

    我收集了大约20000个对象,需要持久化到我的数据库中。现在,我不需要执行20000个insert语句,而是使用一个XML参数传递所有记录。

    至于序列化对象并将其传递到过程中,我已经准备好了。但是,我想知道是否有人有一种优雅的方式来完成以下工作:

    在我们的C代码库中,我们有一些静态值在保存到数据库时表示空值。例如,如果一个整数等于-1,或者日期时间等于datetime.minvalue;则保存空值。我们有自己的小定制实现,在保存对象时为我们处理这个问题。

    在执行XML序列化时,我是否可以做类似的事情?现在它在XML中输出-1和datetime.minvalue。我有一个扩展方法( IsNull() )如果保存的值是空默认值,则返回真/假。

    有什么建议吗?小窍门?

    2 回复  |  直到 14 年前
        1
  •  0
  •   STW    14 年前

    XmlSerializer了解许多不同的属性;其中一个属性是 DefaultValueAttribute .

    当包含时,如果实际值与默认值不同,xmlserializer将只序列化值检查,因此您只需要:

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

    另外,如果你没有考虑过,看看 SqlBulkCopy 类,这是一种向SQL Server发送大量记录的高性能方法。

        2
  •  0
  •   STW    14 年前

    你可以实现 IXmlSerializable 控制对象的XML序列化。尤其是实施 WriteXml 替换空白或 xsi:null 包含空的能指值的属性/字段的值(不管您想如何处理)。