2015-10-26 24 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>