C# Metro序列化一个类?

3
我正在使用C# WPF .NET 4.0编写一个游戏,但我正在将其移植到WinRT以成为Metro应用程序。
我无法理解序列化。以前,我会使用[serializable()]标记类并将其保存到磁盘中。
到目前为止,我已经找到了DataContracts和xmlserialization,但是如何序列化一个类并将其写入磁盘呢?
我是否需要使用属性标记来标记类中的每个属性,请帮忙解答。
1个回答

1

使用 XmlSerializer,实际上,在许多情况下您不需要标记任何内容。添加属性可以更好地控制最终的 xml。

使用 DataContractSerializer,最好添加 [DataContract][DataMember] 属性;您无法获得相同类型的控制,但它仍然可以很好地工作。

这两者的特点是不同的:

  • DCS 不使用构造函数 - XS 使用公共无参数构造函数
  • DCS 支持序列化回调(XS 不支持)
  • XS 支持条件序列化(DCS 不支持)
  • 等等

您可能还想考虑 protobuf-net,它最近支持 WinRT,并且输出更小而且比其他两种方法快得多(使用 new precompiler 时);它支持几乎所有来自 DCS 和 XS 的功能和选项,但具有快速的二进制、跨平台输出。


你能提供一些代码,将一个类转换为流吗?我遇到了无法正常工作的问题。 - Windsurfer25
WinRT XAML Toolkit来拯救(通常情况下)-检查此示例或只需获取工具包并使用此及其他扩展方法,使这些事情变得简单:http://winrtxamltoolkit.codeplex.com/SourceControl/changeset/view/17431#309186 - Filip Skakun
@Windsurfer25,你不能“将一个类转换为流”;你需要序列化一个对象,并将其写入流中。我可以举出无数关于序列化的例子,但实际上它归结为“看一下你选择的序列化器的最基本的例子”。 - Marc Gravell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接