C# 在Windows Phone 7上的Silverlight中序列化视图模型

C# 在Windows Phone 7上的Silverlight中序列化视图模型,c#,silverlight,windows-phone-7,C#,Silverlight,Windows Phone 7,我有适用于Windows Phone的Silverlight应用程序。当应用程序删除时,我想存储当前视图模型。首先,我在哪里存储视图模型 电话应用服务(我不知道它何时存活/死亡) 隔离存储 我非常确定我应该将视图模型存储在独立的存储中。我的问题是,当我试图把它放在独立的存储中时,我遇到了一个错误。错误显示: 无法序列化类型“MyViewModel”。考虑用DATACONTractAttor标记它,并标记所有要用DATAMEMBAREATION属性序列化的成员。 我的问题是,我在这个视图模型中有很

我有适用于Windows Phone的Silverlight应用程序。当应用程序删除时,我想存储当前视图模型。首先,我在哪里存储视图模型

  • 电话应用服务(我不知道它何时存活/死亡)
  • 隔离存储
  • 我非常确定我应该将视图模型存储在独立的存储中。我的问题是,当我试图把它放在独立的存储中时,我遇到了一个错误。错误显示:

    无法序列化类型“MyViewModel”。考虑用DATACONTractAttor标记它,并标记所有要用DATAMEMBAREATION属性序列化的成员。

    我的问题是,我在这个视图模型中有很多成员。同时,它还有子对象,这些子对象也有成员。感觉这会弄脏我的代码。奇怪的是,我可以毫无问题地成功地将视图模型放置在PhoneApplicationService中。但是,我只有在尝试将其放入独立存储时才会出现此错误


    我如何克服这个问题?我只想在删除墓碑时保留视图模型。谢谢

    Jeff Prosise应该告诉你关于墓碑铭的几乎所有你需要知道的信息。

    首先,你真的需要保留整个虚拟机吗?这可能是你的应用程序需要的东西;但我仍然要求您考虑只保留您绝对需要的位,并根据需要重新实例化您的VM。这就是说,隔离存储是您可以为持久性推送东西的地方

    您可以使用IsolatedStorageSettings类来存储键值对类型数据。另外,请参阅完整的墓碑演练。培训工具包中有一个可以使用的IsolatedStorageHelper类。它使用一个Json序列化器/反序列化器,应该可以在大多数具有标准类型属性的类上使用。Codeplex中还有一个墓碑助手,可能适合您


    希望这有帮助

    PhoneAppService状态将不会保留数据,如果应用程序在被删除后一段时间被终止。Iso存储是磁盘存储,而PhoneAppService.State只是一个暂时状态字典,可以在逻辑删除后继续使用

    您在VM中保留了多少状态?理想情况下,您应该能够使用保存的模型实体创建新的VM。为什么不使用“PhoneApplicationService.Current.State”而不是IsoStorage?@vidalsason。。我想你可以。但这只是你的操作系统保存状态,对吗?就我个人而言,我总是使用必需的事件来管理隔离存储中的持久状态。