我有两种方法可以从文件中写入和读取。
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。 我是一个新手程序员,所以我可能会忽略其他东西
答案 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并且工作正常