Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我需要将什么属性保存到RoamingSettings?_C#_Windows 8_Roaming - Fatal编程技术网

C# 我需要将什么属性保存到RoamingSettings?

C# 我需要将什么属性保存到RoamingSettings?,c#,windows-8,roaming,C#,Windows 8,Roaming,我需要将什么属性保存到RoamingSettings 与序列化数据时一样,它需要DataContract和DataMember属性。我可以将类序列化为XML,但我需要使用RoamingSettings保存它: roamingSettings.Values["MyType"] = _mytype; 调试时,我收到以下错误消息: 不支持此类型的数据。 WinRT信息:尝试序列化要写入应用程序数据存储的值时出错 我想我需要一个属性,但哪一个呢?处理这种情况的最佳方法是将对象序列化为字符串并存储它 将

我需要将什么属性保存到RoamingSettings

与序列化数据时一样,它需要
DataContract
DataMember
属性。我可以将类序列化为XML,但我需要使用
RoamingSettings
保存它:

roamingSettings.Values["MyType"] = _mytype;
调试时,我收到以下错误消息:

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


我想我需要一个属性,但哪一个呢?

处理这种情况的最佳方法是将对象序列化为字符串并存储它


将存储的字符串值反序列化为目标对象。

处理这种情况的最佳方法是将对象序列化为字符串并存储它


将存储的字符串值反序列化为目标对象。

使用正确的StorageFolder ApplicationData.Current.RoamingFolder

public static class RoamingStorage<T> {

    public static async void SaveData(string filename, T data)
    {
        try
        {
            StorageFile file = await ApplicationData.Current.RoamingFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
            using (IRandomAccessStream raStream = await file.OpenAsync(FileAccessMode.ReadWrite))
            {
                using (IOutputStream outStream = raStream.GetOutputStreamAt(0))
                {
                    DataContractSerializer serializer = new DataContractSerializer(typeof(List<Item>));
                    serializer.WriteObject(outStream.AsStreamForWrite(), data);
                    await outStream.FlushAsync();
                }
            }
        }
        catch (Exception exc)
        {
            throw exc;
        }
    }

    public static async System.Threading.Tasks.Task<T> LoadData(string filename)
    {
        T data = default(T);
        try
        {
            StorageFile file = await ApplicationData.Current.RoamingFolder.GetFileAsync(filename);
            using (IInputStream inStream = await file.OpenSequentialReadAsync())
            {
               DataContractSerializer serializer = new DataContractSerializer(typeof(T));
               data = (T)serializer.ReadObject(inStream.AsStreamForRead());
            }
        }
        catch (FileNotFoundException ex)
        {
            throw ex;
        }
        catch (Exception ex)
        {
            throw ex;
        }
        return data;
    }
}
公共静态类漫游存储{
公共静态异步void SaveData(字符串文件名,T数据)
{
尝试
{
StorageFile file=wait ApplicationData.Current.RoamingFolder.CreateFileAsync(文件名,CreationCollisionOption.ReplaceExisting);
使用(irandomaccesstream raStream=await file.OpenAsync(FileAccessMode.ReadWrite))
{
使用(IOOutputStream outStream=raStream.GetOutputStreamAt(0))
{
DataContractSerializer serializer=新的DataContractSerializer(typeof(List));
serializer.WriteObject(outStream.AsStreamForWrite(),data);
等待流出。FlushAsync();
}
}
}
捕获(异常exc)
{
抛出exc;
}
}
公共静态异步System.Threading.Tasks.Task LoadData(字符串文件名)
{
T数据=默认值(T);
尝试
{
StorageFile file=Wait ApplicationData.Current.RoamingFolder.GetFileAsync(文件名);
使用(IInputStream inStream=wait file.OpenSequentialReadAsync())
{
DataContractSerializer serializer=新的DataContractSerializer(typeof(T));
data=(T)serializer.ReadObject(inStream.AsStreamForRead());
}
}
捕获(FileNotFoundException ex)
{
掷骰子;
}
捕获(例外情况除外)
{
掷骰子;
}
返回数据;
}
}
示例调用

RoamingStorage<List<Item>>.SaveData(FILENAME,Items);

List<Item> data = await RoamingStorage<List<Item>>.LoadData(FILENAME);
RoamingStorage.SaveData(文件名、项目);
列表数据=等待RoamingStorage.LoadData(文件名);

使用正确的StorageFolder应用程序Data.Current.RoamingFolder

public static class RoamingStorage<T> {

    public static async void SaveData(string filename, T data)
    {
        try
        {
            StorageFile file = await ApplicationData.Current.RoamingFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
            using (IRandomAccessStream raStream = await file.OpenAsync(FileAccessMode.ReadWrite))
            {
                using (IOutputStream outStream = raStream.GetOutputStreamAt(0))
                {
                    DataContractSerializer serializer = new DataContractSerializer(typeof(List<Item>));
                    serializer.WriteObject(outStream.AsStreamForWrite(), data);
                    await outStream.FlushAsync();
                }
            }
        }
        catch (Exception exc)
        {
            throw exc;
        }
    }

    public static async System.Threading.Tasks.Task<T> LoadData(string filename)
    {
        T data = default(T);
        try
        {
            StorageFile file = await ApplicationData.Current.RoamingFolder.GetFileAsync(filename);
            using (IInputStream inStream = await file.OpenSequentialReadAsync())
            {
               DataContractSerializer serializer = new DataContractSerializer(typeof(T));
               data = (T)serializer.ReadObject(inStream.AsStreamForRead());
            }
        }
        catch (FileNotFoundException ex)
        {
            throw ex;
        }
        catch (Exception ex)
        {
            throw ex;
        }
        return data;
    }
}
公共静态类漫游存储{
公共静态异步void SaveData(字符串文件名,T数据)
{
尝试
{
StorageFile file=wait ApplicationData.Current.RoamingFolder.CreateFileAsync(文件名,CreationCollisionOption.ReplaceExisting);
使用(irandomaccesstream raStream=await file.OpenAsync(FileAccessMode.ReadWrite))
{
使用(IOOutputStream outStream=raStream.GetOutputStreamAt(0))
{
DataContractSerializer serializer=新的DataContractSerializer(typeof(List));
serializer.WriteObject(outStream.AsStreamForWrite(),data);
等待流出。FlushAsync();
}
}
}
捕获(异常exc)
{
抛出exc;
}
}
公共静态异步System.Threading.Tasks.Task LoadData(字符串文件名)
{
T数据=默认值(T);
尝试
{
StorageFile file=Wait ApplicationData.Current.RoamingFolder.GetFileAsync(文件名);
使用(IInputStream inStream=wait file.OpenSequentialReadAsync())
{
DataContractSerializer serializer=新的DataContractSerializer(typeof(T));
data=(T)serializer.ReadObject(inStream.AsStreamForRead());
}
}
捕获(FileNotFoundException ex)
{
掷骰子;
}
捕获(例外情况除外)
{
掷骰子;
}
返回数据;
}
}
示例调用

RoamingStorage<List<Item>>.SaveData(FILENAME,Items);

List<Item> data = await RoamingStorage<List<Item>>.LoadData(FILENAME);
RoamingStorage.SaveData(文件名、项目);
列表数据=等待RoamingStorage.LoadData(文件名);

是的,谢谢!但是,我找不到任何异步方式来实现这一点:/yeah,谢谢!但是,我找不到任何异步方法可以做到这一点:/