C# 具有自定义类的windows 8应用程序漫游存储

C# 具有自定义类的windows 8应用程序漫游存储,c#,windows-8,microsoft-metro,C#,Windows 8,Microsoft Metro,我正在学习用c语言在Windows8中编程。我已经完成了很多教程,比如在过程中,我正在尝试创建一个显示数据存储的简单应用程序。我在漫游存储中找到的所有示例都只能存储简单字符串。有没有办法在那里存储更复杂的数据 示例:具有姓名和年龄的基本类人员列表。我试图这样做: 保存数据: roamingSettings.Values[peopleList]=人 加载数据: people=ListroamingSettings.Values[peopleList] WinRT信息:尝试序列化要写入应用程序数据存

我正在学习用c语言在Windows8中编程。我已经完成了很多教程,比如在过程中,我正在尝试创建一个显示数据存储的简单应用程序。我在漫游存储中找到的所有示例都只能存储简单字符串。有没有办法在那里存储更复杂的数据

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

保存数据:

roamingSettings.Values[peopleList]=人

加载数据:

people=ListroamingSettings.Values[peopleList]

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


所以,也许你能保存的只是字符串值——但我也没有在任何地方看到指定的值

是的,您可以将值作为集合保存到数据中。你的问题的解决办法是 ApplicationDataCompositeValue类

有关更多信息,请参阅

正如您所提到的,您正在用C语言开发,下面是解决您的问题的代码 我想象,你有一个有两个成员的Person类

class person
{
int PersonID;
string PersonName
}
现在,要读取和写入这个类的值,下面是代码

首先在窗口类的构造函数中,在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;
}
void DisplayOutput()
    {
        ApplicationDataCompositeValue composite = (ApplicationDataCompositeValue)roamingSettings.Values["classperson"];

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

        }

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

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

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

        }

         }

是的,您可以将值作为集合保存到数据中。你的问题的解决办法是 ApplicationDataCompositeValue类

有关更多信息,请参阅

正如您所提到的,您正在用C语言开发,下面是解决您的问题的代码 我想象,你有一个有两个成员的Person类

class person
{
int PersonID;
string PersonName
}
现在,要读取和写入这个类的值,下面是代码

首先在窗口类的构造函数中,在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;
}
void DisplayOutput()
    {
        ApplicationDataCompositeValue composite = (ApplicationDataCompositeValue)roamingSettings.Values["classperson"];

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

        }

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

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

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

        }

         }

如果我有我自己的类型而不是字符串,bool,int等,我会得到这个异常信息。WinRT:尝试序列化要写入应用程序数据存储的值时出错。如果我有我自己的类型而不是字符串,bool,int,etc我得到这个异常信息:尝试序列化要写入应用程序数据存储的值时出错