2016-05-21 2 views
-1

Каждый раз, когда я пытаюсь прочитать JSON из файла, я получаю сообщение об ошибке. Если я пытаюсь сделать это:Прочтите JSON из файла C# UWP

JObject o1 = JObject.Parse(File.ReadAllText(@"c:\DB.json")); 

или:

using (StreamReader file = File.OpenText(@"c:\db.json")) 
      using(JsonTextReader reader = new JsonTextReader(file)) 
      { 
       JObject o2 = (JObject)JToken.ReadFrom(reader); 
      } 

Я получаю ошибку те,

{ "Не удалось найти файл 'C: \ DB.json. ":" c: \ DB.json "}

Если я скопирую DB.json в ошибку каталога F:

{ "Не удалось найти часть пути. Е: \ DB.json '"}

Что моя проблема?

+1

И что произойдет, если вы поместите файл в папку bin и просто укажите имя файла SR? – Leron

+0

Он работает, спасибо! –

+0

Найти решение здесь [UWP JSON] (http://stackoverflow.com/questions/20993849/filenotfoundexception-reading-json-file-from-assets-folder-in-windows-store-app) – Uwpbeginner

ответ

0

Когда я пытаюсь прочитать файл из JSON, я делаю следующее.

первый раз загрузка NewtonSoft.Json упаковка из NuGet.

, а затем вы можете использовать следующий код. (Изменить строку в объект, который вы хотите десериализации)

private static string JsonFile = "myFile.dat"; //your file name 

public static async Task<List<string>> LoadFromJsonAsync() 
    { 
     string JsonString = await DeserializeFileAsync(JsonFile); 
     if (JsonString != null) 
      return (List<string>)JsonConvert.DeserializeObject(JsonString, typeof(List<string>)); 
     return null; 
    } 

private static async Task<string> DeserializeFileAsync(string fileName) 
    { 
     try 
     { 
      StorageFile localFile = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName); 
      return await FileIO.ReadTextAsync(localFile); 
     } 
     catch (FileNotFoundException) 
     { 
      return null; 
     } 
    } 
2

Хотя мы можем использовать File.ReadAllText method или File.OpenText method в UWP приложениях, но есть некоторые ограничения на параметр path в UWP. Не все пути можно использовать здесь.

Приложения могут получить доступ к определенным местам файловой системы по умолчанию. Приложения также могут получить доступ к дополнительным местам через сборщик файлов или объявить возможности.

Для получения дополнительной информации см. File access permissions.

Для вашего пути к файлу, такого как «c: \ DB.json» или «f: \ DB.json», по умолчанию они не могут быть доступны в UWP. Вы можете использовать FileOpenPicker, чтобы получить доступ первым, а затем добавьте этот элемент в вашего приложения, чтобы ваше приложение могло легко получить доступ к этому элементу в будущем.

Кроме того, чтобы читать файлы в приложениях UWP, вы можете обратиться к Create, write, and read a file.

Как все приложения могут получить доступ к папке установки приложений и положению данных приложения по умолчанию, я предлагаю вам разместить/сохранить json-файл в этих двух местах. Если файл идет с вашим приложением и его не нужно менять, вы можете поместить его в каталог установки приложения. Для этого вы можете добавить файл в свой проект и установить его Build Action как Контент. Однако файлы в каталоге установки доступны только для чтения, если вам нужно позже изменить файл, вы можете сохранить его в местах данных данных приложения, таких как ApplicationData.LocalFolder.

Смежные вопросы