UWP项目读取本地JSON文件遇Newtonsoft.Json解析异常求助
问题解决方案
核心错误原因
你试图将对象数组格式的JSON反序列化为List<string>,但JSON中的每个元素都是包含嵌套结构的复杂对象(不是字符串),这直接导致了JsonReaderException——解析器在期望字符串时遇到了对象的起始符号{。
解决步骤
1. 创建匹配JSON结构的数据模型类
根据你的JSON结构,定义对应的C#类:
public class Trader { // 注意JSON里的键是"taderName"(拼写可能是typo,保持和JSON一致) public string taderName { get; set; } public List<Quest> quests { get; set; } } public class Quest { public string title { get; set; } public List<Objective> objectives { get; set; } } public class Objective { public string objective { get; set; } }
2. 修改反序列化与数据加载代码
将反序列化目标类型改为List<Trader>,然后遍历数据提取需要显示的内容添加到ListBox:
private async void LoadData() { StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///questList.json")); string jsonText = await FileIO.ReadTextAsync(file); // 反序列化为Trader对象列表 List<Trader> traders = JsonConvert.DeserializeObject<List<Trader>>(jsonText); // 遍历并提取要显示的内容(示例显示交易商名称+任务标题) foreach (Trader trader in traders) { foreach (Quest quest in trader.quests) { questList.Items.Add($"{trader.taderName} - {quest.title}"); } } }
3. (可选)使用数据绑定优化ListBox显示
如果需要更美观的显示(比如展示任务目标),可以通过设置ListBox的ItemTemplate实现数据绑定:
<ListBox x:Name="questList"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel> <TextBlock FontWeight="Bold" Text="{Binding taderName}"/> <TextBlock Text="{Binding quests[0].title}" Margin="10,0"/> <ItemsControl ItemsSource="{Binding quests[0].objectives}"> <ItemsControl.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding objective}" Margin="20,0"/> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
对应的后台代码直接绑定数据源即可:
private async void LoadData() { StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///questList.json")); string jsonText = await FileIO.ReadTextAsync(file); List<Trader> traders = JsonConvert.DeserializeObject<List<Trader>>(jsonText); questList.ItemsSource = traders; }
额外提示
- 注意JSON中的
taderName可能是traderName的拼写错误,若后续要修正JSON,记得同步修改模型类的属性名称(或用[JsonProperty("taderName")]特性映射)。 - 确保已正确安装Newtonsoft.Json NuGet包,避免版本兼容问题。
内容的提问来源于stack exchange,提问作者drew trumbaturi
相关产品推荐
相关产品推荐

