如何在UWP中读取嵌入式资源?

时间:2016-05-03 16:33:44

标签: windows-phone win-universal-app embedded-resource windows-10-mobile

我正在将我的一个应用程序从WP 8.0迁移到UWP。我有一些JSON内容,我想隐藏常规用户。在以前的版本中,我能够将这些JSON文件的构建操作设置为“嵌入式资源”并使用以下方式迭代它们:

Application.GetResourceStream(new Uri(path, UriKind.Relative));

但这种方法在UWP中不可用。

那么有没有办法在UWP中读取嵌入式资源?或者除了将构建操作设置为“内容”之外,还有其他方法可以存储这些文件吗?

2 个答案:

答案 0 :(得分:4)

您可以使用Assembly类的方法迭代可用资源列表:

var names = someInstance.GetType()
             .GetTypeInfo()
             .Assembly
             .GetManifestResourceNames();

然后从上面的列表中按全名加载资源:

var stream = someAssembly.GetManifestResourceStream(name);

然后用流做任何你想做的事。

答案 1 :(得分:0)

您需要获得嵌入资源的Assembly,然后调用GetManifestResourceStream。

我有一个带有命名空间的示例YourProjectNameSpace让MyFolder包含MyFile.json:

public class EndpointBuilder
{
    private static String _filePath = "YourProjectNameSpace.MyFolder.MyFile.json";

    public async Task<Endpoint> Build() {

        var assembly = this.GetType().GetTypeInfo().Assembly;
        var stream = assembly.GetManifestResourceStream(_filePath);

        JsonSerializer jsonSerializer = new JsonSerializer();
        var serializer = new JsonSerializer();

        using (var sr = new StreamReader(stream))
        using (var jsonTextReader = new JsonTextReader(sr))
        {
            Endpoint enpoint =  serializer.Deserialize<Endpoint>(jsonTextReader);
            return enpoint;
        }
    }
}