如何将<object>保存到C#uwp中的设置

时间:2016-04-10 10:33:07

标签: c# save win-universal-app settings listobject

如何将List保存到C#uwp中的设置?

定义对象的类

//class    

public class ListOfFile
        {
            public string File_DisplayName { get; set; }
            public string File_Name { get; set; }
            public string File_path { get; set; }
            public string File_Extension { get; set; }
            public StorageFile File_Storage { get; set; }
            public ImageSource File_Thumbnail { get; set; }
        }

define方法对于loadfile 方法:

//method
void loadfile()
{
    List<ListOfFile> FileBind=new List<ListOfFile>();
     var FilesInFolder = await FolderItem.GetFilesAsync();

    foreach(var FileItem in FilesInFolder)
    {
           FileBind.Add(new ListOfFile()
                        {
                            File_DisplayName = FileItem.DisplayName,
                            File_Extension = FileItem.FileType
                        ,
                            File_Name = FileItem.Name
                        ,
                            File_path = FileItem.Path
                        ,
                            File_Thumbnail = bitmapimage
                        ,
                            File_Storage =FileItem
                        });
    }

    ApplicationData.Current.LocalSettings.Values["allfiles"]=FileBind;
}

结束行错误:(

如何在设置中保存列表? 请帮帮我。

3 个答案:

答案 0 :(得分:2)

不要忘记ApplicationData.LocalSettings有限制。

每个设置的大小最多为8K字节。

您正试图存储

List<T> 

在设置中。 看看支持的types

List<T> 
那里缺少

。看起来你不能这样做。可能只有一些转换为对象

看看这个类似主题的解决方案: How to store a list of objects in application settings

更新:

您可以尝试使用DataContractSerializer替换BinaryFormatter。 这篇文章可能会对您有所帮助:Saving and Loading App Data (Windows Store C# UWP / 8.1)

答案 1 :(得分:2)

UWP社区工具包 - 对象存储

我知道这问题已经过半年了,但是我希望我早点发现UWP工具包,因为我有类似的情况,我想快速轻松地存储一个简单的类列表设备信息在漫游设置中漫游。在这里发布这个以防它可能用于类似OP和我自己的其他人。

如果您的应用程序面向Windows 10 Build 10586或更高版本,则可以使用属于Microsoft UWP Community Toolkit的对象存储帮助程序来存储小型或大型对象,其中还包括列表。

您可以通过将 Microsoft.Toolkit.Uwp NuGet包添加到您的UWP项目来添加该工具包。

LocalObjectStorageHelper(Snippet Source

的示例
return (Iterator<z>) this.myHashmap.keySet().iterator();

可以使用 RoamingObjectStorageHelper 完成相同的操作。

重要说明

您可以使用保存(键,对象) SaveFileAsync(键,对象)保存简单和复杂对象,例如列表。

保存会将对象存储在本地/漫游设置中(具体取决于您选择的存储助手);这意味着它受数据约束,并且序列化对象的总大小必须小于8 KB。

SaveFileAsync 会将对象存储为应用的 LocalState RoamingState 目录中的序列化文件(至少我相信如此)稍后使用ReadFileAsync访问。如果您的对象非常复杂并且您希望序列化为大于8 KB的大小,请使用此方法。

重要警告

使用 SaveFileAsync 存储大型/复杂对象或对象列表时要小心。每个UWP应用程序仅分配100 KB(AKA RoamingStorageQuota)。如果超出配额,数据复制将停止。

答案 2 :(得分:0)

您不应将整个文件和位图图像存储到设置中。这不是正确使用应用程序的设置功能。最多,您可以存储文件列表及其路径,这可以允许您在运行时读取内容并显示缩略图。如果你已经提到了你想要实现的目标,那么也许我们可以帮助你做得更好。

如果您绝对需要在应用中存储整个文件,可以copy those files into your app's local storage folder或者可以查看integrating with OneDrive以获得更便携的解决方案。