windows 8 app漫游存储与自定义类

时间:2012-11-20 12:22:10

标签: c# windows-8 microsoft-metro

我正在使用c#学习Windows 8中的编程。我在这个过程中已经完成了许多教程(例如http://msdn.microsoft.com/en-us/library/windows/apps/hh986968.aspx),我正在尝试创建一个显示数据存储的简单应用程序。我能够找到的所有示例都只在漫游存储中存储简单的字符串。有没有办法在那里存储更复杂的数据?

示例:基本类的列表具有名称和年龄的人员。我试图这样做:

保存数据:

roamingSettings.Values [“peopleList”] =人;

加载数据:

people =(List)roamingSettings.Values [“peopleList”];

WinRT信息:尝试序列化要写入应用程序数据存储的值时出错。 保存数据时,我收到错误“不支持此类数据”

所以,也许你可以保存的只是字符串值 - 但我还没有看到任何指定的地方。

1 个答案:

答案 0 :(得分:4)

是的,您可以将值作为集合保存到raoming数据中。你的问题的解决方案是     ApplicationDataCompositeValue class

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.applicationdatacompositevalue.aspx

正如您所提到的,您正在使用C#进行开发,以下是您的问题的代码 我想,你有一个有两个成员的Person类

class person
{
int PersonID;
string PersonName
}

现在,要读取和写入此类的值,这里是代码

首先在Window类的构造函数中,在InitializeComponent();下,创建一个漫游设置对象

Windows.Storage.ApplicationDataContainer roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings;

要写入合成,请使用以下代码

void write (Person Peopleobj)
{
Windows.Storage.ApplicationDataCompositeValue composite = new Windows.Storage.ApplicationDataCompositeValue();
composite["PersonID"] = Peopleobj.PersonID;
composite["PersonName"] = Peopleobj.PersonName;
roamingSettings.Values["classperson"] = composite;
}

要读取Person对象,请使用以下代码

void DisplayOutput()
    {
        ApplicationDataCompositeValue composite = (ApplicationDataCompositeValue)roamingSettings.Values["classperson"];

        if (composite == null)
        {
            // "Composite Setting: <empty>";
        }
        else
        {
        Peopleobj.PersonID = composite["PersonID"] ;
        Peopleobj.PersonName = composite["PersonName"];

        }

         }