MAUI Blazor中无法加载JSON文件至List的问题求助
JSON读取异常解决方案及内联读取实现
一、项目JSON文件读取修复方案
1. 先确认文件配置
把项目中的JSON文件生成操作设为Embedded resource或Content,复制到输出目录设为如果较新则复制,确保文件能被程序访问到。
2. 正确读取并反序列化代码
在组件生命周期方法中异步读取(不要在@code直接赋值时执行),示例如下:
protected override async Task OnInitializedAsync() { // 方式1:读取嵌入式资源 var assembly = typeof(Index).Assembly; using var stream = assembly.GetManifestResourceStream("MauiAppBurned.你的JSON文件名.json"); using var reader = new StreamReader(stream); var jsonContent = await reader.ReadToEndAsync(); // 反序列化到对应模型,取出活动列表 var rootModel = JsonSerializer.Deserialize<Rootobject>(jsonContent); ActivityList = rootModel.burned.ACTIVITY; }
如果JSON放在wwwroot目录下,也可以用HttpClient读取:
protected override async Task OnInitializedAsync() { var rootModel = await Http.GetFromJsonAsync<Rootobject>("你的JSON文件名.json"); ActivityList = rootModel.burned.ACTIVITY; }
3. 常见问题排查
- 确保JSON结构和模型完全匹配:根节点必须是
{"burned": {"ACTIVITY": [ ... ]}}格式 - 检查属性名一致性:比如JSON里的
"METS"不能带空格,要和ACTIVITY类的METS属性名完全一致 - 数值格式正确:
METS是decimal类型,JSON里直接写2.5,不要加引号
二、内联读取JSON列表实现
如果不想依赖外部文件,直接在代码中内联完整的JSON结构:
protected override void OnInitialized() { string inlineJson = @" { ""burned"": { ""ACTIVITY"": [ { ""CD"": ""19260"", ""METS"": 2.5, ""CATEGORY"": ""winter activities"", ""DESC"": ""snow blower, walking and pushing"" }, { ""CD"": ""12345"", ""METS"": 3.0, ""CATEGORY"": ""sports"", ""DESC"": ""running"" } ] } }"; var rootModel = JsonSerializer.Deserialize<Rootobject>(inlineJson); ActivityList = rootModel.burned.ACTIVITY; }
额外代码优化建议
在Submit方法中,要加空值判断避免空引用异常:
ACTIVITY model = ActivityList.FirstOrDefault(a => a.CD == submitActivity.CD); if (model == null) { finalresult = "请选择有效的活动"; return; }
内容的提问来源于stack exchange,提问作者KALYANA ALLAM
相关产品推荐
相关产品推荐

