【问题标题】:NetDataContractSerializer vs DataContractSerializerNetDataContractSerializer 与 DataContractSerializer
【发布时间】:2011-12-14 23:55:42
【问题描述】:

我们有一个应用程序,其中包含我们希望在数据库中保持序列化的对象。
目前我们正在使用NetDataContractSerializer,但最近发现由于涉及.Net类型信息,它会创建巨大的文件,这意味着应用程序缓慢,即使对于基本对象也是如此。
我们正在考虑改用DataContractSerializer,我一直在寻找两者的一个很好的比较,但没有找到。

  • 两者创建的对象的大小有什么区别?
  • 有很大的性能差异吗?
  • 当我的对象包含List<X>,其中X 被多个其他对象继承,因此列表在运行时包含许多不同的类型时,它们中的任何一个是否有问题? (有人告诉我DataContractSerializer 可以被赋予KnownTypes 属性,但这意味着代码中有更多的依赖关系。有没有办法让DataContractSerializer 知道我的解决方案中的所有类型?)

谢谢。

【问题讨论】:

    标签: datacontractserializer netdatacontractserializer


    【解决方案1】:
    1. NetDataContractSerializer (NetDCS) 写入所有对象的类型信息,而DataContractSerializer (DCS) 只写入那些需要的(即,如果您将成员声明为类型B,并且该成员在被序列化时的实际值为类型 D,其中 D 是 B 的派生类型,因此 DCS 序列化类型中的“噪音”要少得多。
    2. 并非如此,但您应该在您的场景中尝试这两种方法,看看它是否会影响您
    3. 您需要在 DCS 中使用已知类型,但如果您不想使用已知类型,可以使用DataContractResolver。可以在 Youssef Massaoui's blog 中找到此类解析器的示例,有关解析器本身的更多信息可以在 http://blogs.msdn.com/b/carlosfigueira/archive/2011/09/21/wcf-extensibility-data-contract-resolver.aspx 我关于 WCF 可扩展性的帖子中找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多