如何在 .NET MAUI 中加载 json 文件?

Mah*_*her 1 json maui

我在 Resources/Raw 中创建了一个 json 文件,并对 MauiAsset 进行了构建生成操作。我使用以下代码加载 json 文件,但出现未找到文件异常。

public partial class MainPage : ContentPage
{
    int count = 0;

    public MainPage()
    {
        InitializeComponent();
        var json = LoadMauiAsset();
    }

    async Task LoadMauiAsset()
    {
        try
        {
            using var stream = await FileSystem.OpenAppPackageFileAsync("drugs.json");
            using var reader = new StreamReader(stream);

            var contents = reader.ReadToEnd();
        }
        catch (Exception ex)
        {

        }
        
    }
}```
Run Code Online (Sandbox Code Playgroud)

Ger*_*uis 5

您粘贴的代码甚至无法编译,或者至少永远不会给您想要的结果。我对您的代码进行了一些修改并验证了它是否有效。

    private async void OnButtonClickedHandler(object sender, EventArgs e)
    {
        var json = await LoadMauiAsset();
        await DisplayAlert("", json, "OK");
    }

    async Task<string> LoadMauiAsset()
    {
        try
        {
            using var stream = await FileSystem.OpenAppPackageFileAsync("foo.json");
            using var reader = new StreamReader(stream);

            return reader.ReadToEnd();
        }
        catch (Exception ex)
        {
            return "";
        }

    }
Run Code Online (Sandbox Code Playgroud)

正如您已经提到的,您需要drugs.jsonResources\Raw\文件中添加 并使用构建操作对其进行标记MauiAsset。要仔细检查,请打开您的 csproj 文件并确保存在这一行:<MauiAsset Include="Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />这可确保上述文件夹下的所有内容都作为资产包含在内。

并且没有提及您的drugs.json文件。可能有这样的条目:

    <ItemGroup>
      <None Remove="Resources\Raw\foo.json" />
    </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

这很好,但您也可以将其删除。