2015-10-26 22 views
0

我正在制作一个UWP应用程序,我试图通过序列化将用户选择的存储文件保存到本地设置,并且我想要反序列化它们并在需要时再次使用它们。它将IReadOnlyList对象保存到本地设置就好,但是在反序列化它给出和异常的时候,这个方法不能返回存储文件,因为它没有这个的构造器,就像这样。我发布了保存和加载数据的两种方法的代码。请看到它,帮我...UWP Json.Convert存储文件

public static void SaveState<T>(string key, T value)//save method 
    { 
     //key is provided by me so that i can use it to load the data later. 
     var localSettings = ApplicationData.Current.LocalSettings; 
     localSettings.Values[key] = JsonConvert.SerializeObject(value); 
    } 

    public static T LoadState<T>(string key)//loading data 
    { 
     var localSettings = ApplicationData.Current.LocalSettings; 
     if (localSettings.Values.ContainsKey(key))//exception occurs on the below line 
      return JsonConvert.DeserializeObject<T>(((string)localSettings.Values[key])); 
     return default(T); 
    } 

和我使用这些方法如下: -

var files = StateService.LoadState<IReadOnlyList<StorageFile>>(Playlist); 
    //StateService is the class which has these static methods... 

注:当我试图与在没有数据反对一键加载数据本地设置,它不给任何异常,只是返回时,其应该返回IReadOnlyList的填充名单,然后它给和异常空list.but ...

+0

你应该把你得到的例外。 – billybob

+0

在Newtonsoft.Json.dll中发生类型为'Newtonsoft.Json.JsonSerializationException'的异常,但未在用户代码中处理 附加信息:无法找到用于Windows.Storage.StorageFile类型的构造函数。一个类应该有一个默认构造函数,一个带参数的构造函数或一个带有JsonConstructor属性标记的构造函数。路径'[0] .ContentType',第1行,第16位。 如果存在此异常的处理程序,则可以安全地继续执行程序。 –

回答

1

我认为JsonConvert.DeserializeObject尝试实例IReadOnlyList<StorageFile>但接口不能被实例化...你应该使用例如List<StorageFile>作为设置和读取列表的T ...

+0

我会尝试列表而不是IReadOnlyList ,让你知道结局感谢 –

+0

的:)我想什么ü说,仍然得到同样的异常,我在下面粘贴 异常的文本类型Newtonsoft.Json的”异常。 JsonSerializationException'发生在Newtonsoft.Json.dll中,但未在用户代码中处理 附加信息:无法找到用于Windows.Storage.StorageFile类型的构造函数。一个类应该有一个默认构造函数,一个带参数的构造函数或一个带有JsonConstructor属性标记的构造函数。路径'[0] .ContentType',第1行,第16位。 如果存在此异常的处理程序,则可以安全地继续执行程序。 –

+0

啊,是的,你不能存储StorageFile设置 –

0

我之前做过类似的事情,而且我遇到了同样的问题。我做了不同的方法,而不是试图保存StorageFile我用关键字保存了json内容,总是我的数据是字符串(json数据),我可以毫无问题地使用JsonConvert.DeserializeObject<T>