10

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

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

谢谢。

4

1 回答 1

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