如何在windows phone开发中正确读取隔离文件

时间:2016-01-17 17:17:49

标签: c# json windows-phone-8.1 readfile isolatedstorage

我有两种方法可以从文件中写入和读取。

    public static async Task WriteDataToFileAsync(string fileName, string content)
    {
        byte[] data = Encoding.Unicode.GetBytes(content);

        var folder = ApplicationData.Current.LocalFolder;
        var file = await folder.CreateFileAsync(fileName, CreationCollisionOption.OpenIfExists);

        using (var s = await file.OpenStreamForWriteAsync())
        {
            await s.WriteAsync(data, 0, data.Length);
        }
    }



    public async static Task<string> ReadFileContentsAsync()
    {
        var folder = ApplicationData.Current.LocalFolder;

        try
        {
            var file = await folder.OpenStreamForReadAsync("MenuData.json");

            using (var streamReader = new StreamReader(file))
            {
                Debug.WriteLine(streamReader.ReadToEnd());
                return streamReader.ReadToEnd();
            }
        }
        catch (Exception)
        {
            return string.Empty;
        }


    }

然后在这两种方法中使用

    public static async void ApiToFileRestaurants()
    {
        HttpClient client = new HttpClient();
        HttpResponseMessage response = client.GetAsync("http://bonar.si/api/restaurants").Result;
        response.EnsureSuccessStatusCode();
        string responseBody = response.Content.ReadAsStringAsync().Result;
        await Restaurant.WriteDataToFileAsync("MenuData.json", responseBody);


    }

    public async static Task<List<Restaurant>> FileToRestaurantList()
    {
        var responseBody = await Restaurant.ReadFileContentsAsync();
        List<Restaurant> parsedRestaurants = (List<Restaurant>)Newtonsoft.Json.JsonConvert.DeserializeObject(responseBody, typeof(List<Restaurant>));
        return parsedRestaurants;
    }

现在我的问题是ReadFileAsync没有返回我知道保存在MenuData.json文件中的结果,而是返回空字符串。

  

我主要从msdn documentation获取源代码。

我的wp电动工具中文件的位置看起来像that。 我是一个新手程序员,所以我可能会忽略其他东西

2 个答案:

答案 0 :(得分:2)

您是否可以尝试使用ReadToEndAsync异步读取文件中的数据,ReadToEndAsync基本上解析完整数据并将响应作为一个字符串发送。

var file = await folder.OpenStreamForReadAsync("MenuData.json");
using (var streamReader = new StreamReader(file))
{
   return await streamReader.ReadToEndAsync();
}

希望这有帮助!

答案 1 :(得分:2)

我从另一个论坛获得了解决方案

  

你两次调用streamReader.ReadToEnd()。第一次登录   它到Debug流,第二个是你实际用作的   结果。该方法每次将文件指针移动到末尾   第二次打电话,没有什么可读的。

所以删除该调试行几乎解决了我的问题。我确实得到了我想要的字符串但是在其中有一个错误,所以Newtonsoft.Json很难解析它。所以我尝试了@asitis解决方案并将.json更改为.text并且工作正常