【问题标题】:Persisting app data with custom classes使用自定义类持久化应用数据
【发布时间】:2012-09-17 13:34:06
【问题描述】:

我正在创建一个需要包含两种主要数据类型的 Windows 8 应用程序 - List<Project>List<User>,其中 ProjectUser 是包含不同类型数据的数据模型(包括 Lists其他对象等)。

我之前一直在制作 Windows Phone 应用程序,我只是在类似的场景中使用应用程序设置来存储数据。所以我希望这也适用于 Windows 8。

我选择使用ApplicationData.Current.LocalSettings-结构来保存我的应用数据。但是,每当我尝试保存数据时,都会收到此类错误:

WinRT 信息:尝试序列化要写入应用程序数据存储的值时出错附加信息:不支持此类型的数据。

如果有任何区别,模型会标有[DataContract] 属性。

据我所知understood Microsoft,只能以这种方式保存标准数据类型(如布尔值、字符串等)。这是正确的吗?

如果是这样,我该如何保存以这种方式结构化的数据?

我们将不胜感激!

【问题讨论】:

    标签: c# wpf serialization windows-8 data-persistence


    【解决方案1】:

    复杂的类型会引起一些悲伤,我无法确认这是不可能的,但还有其他选择。

    在我想存储应用程序数据而没有数据库引擎开销的情况下,我使用序列化。根据您的类型的组成(归结为简单的数据类型并具有公共 getter/setter),您可以使用 XML 序列化和/或二进制序列化。

    在能够方便地查看(编辑)应用程序范围之外的数据的情况下,XML 序列化可能更可取。 (调试等)但是,除非您选择手动编码自定义序列化程序,否则它会对数据施加更多限制。二进制序列化更加灵活,并结合压缩和加密为您提供了更多紧凑/伪装/安全的数据存储选项。 (如果使用的话,压缩/解压缩和加密需要额外的时间成本。)

    不幸的是,二进制不太适合将某些内容粘贴到本地应用程序数据中,而无需先将其转换为 Base64 字符串。 (导致潜在的巨大文本块)通常使用序列化选项,我会考虑将文件保存在用户具有足够权限的指定文件夹中。

    【讨论】:

    • 感谢史蒂夫的好回答。但是,您是说真的没有一种简单的方法来保存像我在应用程序中那样结构化的数据吗?我会收集很多应用程序像我一样进行数据结构,所以应该有比手动序列化更简单的方法,不是吗?
    • 在不知道数据结构的情况下很难说。 “应用程序数据”可以意味着任何东西。用户配置设置等简单的事情很容易通过配置类和能够持久保存其值并从应用程序设置构造它的存储库来管理。如果您想要更复杂的数据结构,这并不容易。为此,我将序列化或 ORM 应用于数据源。 (数据库或 XML)IMO,序列化是一个非常简单的选项。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多