【问题标题】:Serialization and deserialization with .NET使用 .NET 进行序列化和反序列化
【发布时间】:2013-06-27 16:24:26
【问题描述】:

我目前正在和几个朋友讨论如何设计易于序列化和反序列化的类。我们目前正在使用“本土”尝试,其中涉及许多令人毛骨悚然的界面、自定义属性和 加载 反射,现在已经超出了它设计的扩展范围。所以我们正在寻找替代品。最好是已经具有生产质量的成熟框架。但到目前为止,我们找不到任何适合我们需要的东西。

我们当前的系统提供以下功能:

  • 它使用 XML,这不是直接重要的。 但是:内容应该是人类可读的,并且在 VCS 上下文中使用时会产生“不错的”差异。所以我猜 XML 是合理的。
  • 它适用于 Silverlight、XNA 和“普通”.NET Framework。我们目前只使用“普通”的 .NET 框架,但不想削减 Silverlight。 XNA 是一种奖励,但要求不是太严格。
  • 它支持“部分”反序列化,它基本上只加载我们资源属性的一个子集。这不是严格要求,但可以显着加快加载时间,因为可以“按需”加载资源。

我们知道特别是最后一个要求有点不寻常,但也许我们很幸运,有人知道一个像样的框架?我们也很乐意听到不太符合我们要求的框架以及 .NET 标准库之外的框架,因为我们真的找不到很多。

【问题讨论】:

  • 别忘了标记你最喜欢的答案 ;-)
  • 遗憾的是,没有一个答案真正回答了这些问题。我想那是因为我正在寻找的东西还没有实现。

标签: .net serialization


【解决方案1】:

您可以尝试使用System.XmlXmlSerializer 对其进行序列化,然后在.NET 3.5 中使用System.Xml.LinqXDocument 进行部分反序列化。也许您需要 Silverlight 和 XNA 中的其他方法。

【讨论】:

  • 嗯,自动序列化并自己反序列化的想法听起来不错。至少减少序列化错误的可能性。
【解决方案2】:

您是否尝试过使用XmlSerializerBinaryFormatter(及相关)类?

大多数事情都可以使用这两者中的任何一个轻松地进行序列化和反序列化,并且在许多情况下,即使使用这些类(例如循环引用)阻止序列化,使用serialisation attributes 也很容易解决,或者在极端情况下通过实现IXmlSerializableISerializable

.Net 序列化机制非常通用 - 在排除标准 .Net 序列化技术之前,您的对象需要非常特殊。

【讨论】:

  • 是的,我还查看了 DataContracts。它们都不允许“部分”反序列化,并且它们都需要完全公共的 getter 和 setter。
猜你喜欢
  • 2013-02-03
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
  • 1970-01-01
相关资源
最近更新 更多