我正在构建一个带有PCL,iOS和Android项目的Xamarin.Forms项目。我的要求之一是我必须从PCL读取存储在平台项目(iOS/Android)中的JSON文件。
请问我该怎么做?我找不到这个问题的解决方案。:(
谢谢尼古拉
如果要读取的文件嵌入在平台项目程序集中,则可以使用以下代码:
var assembly = typeof(MyPage).GetTypeInfo().Assembly;
Stream stream = assembly.GetManifestResourceStream("WorkingWithFiles.PCLTextResource.txt");
string text = "";
using (var reader = new System.IO.StreamReader (stream)) {
text = reader.ReadToEnd ();
}
确保将 WorkingWithFiles 替换为项目的命名空间,将 PCLTextResource 替换为文件的名称.txt。
有关详细信息,请查看加载作为资源嵌入的文件中的 Xamarin 文档
另一方面,如果您想在运行时创建和读取/写入文件,则可以使用PCLStorage库:
public async Task PCLStorageSample()
{
IFolder rootFolder = FileSystem.Current.LocalStorage;
IFolder folder = await rootFolder.CreateFolderAsync("MySubFolder",
CreationCollisionOption.OpenIfExists);
IFile file = await folder.CreateFileAsync("answer.txt",
CreationCollisionOption.ReplaceExisting);
await file.WriteAllTextAsync("42");
}
我通过使用 IoC 容器让它工作。
在我的iOS项目中,我创建了一个ConfigAccess类:
public class ConfigAccess : IConfigAccess
{
public string ReadConfigAsString()
{
return System.IO.File.ReadAllText("config.json");
}
}
我还必须将以下行添加到我的应用程序代表中.cs
SimpleIoc.Default.Register<IConfigAccess, ConfigAccess>();
在我的 PCL 中,我只是在运行时请求一个 ConfigAccess 对象:
var configAccess = SimpleIoc.Default.GetInstance<IConfigAccess>();
var test = configAccess.ReadConfigAsString();