【问题标题】:windows 8 app roaming storage with custom class具有自定义类的 Windows 8 应用程序漫游存储
【发布时间】:2012-11-20 12:22:10
【问题描述】:

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

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

保存数据:

roamingSettings.Values["peopleList"] = people;

加载数据:

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

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

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

【问题讨论】:

    标签: c# windows-8 microsoft-metro


    【解决方案1】:

    是的,您可以将值作为集合保存到 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"];
    
            }
    
             }
    

    【讨论】:

    • 如果我有自己的类型(不是字符串、布尔值、整数等)我会收到此异常“信息 WinRT:尝试序列化要写入应用程序数据存储的值时出错”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多