.NET Framework WinForms JsonSerializer序列化路径后播放音乐路径异常求助
问题分析与解决方案
核心问题
你当前的错误是播放逻辑错误地将JSON配置文件的路径与音乐文件夹路径混淆,导致程序试图从...\Debug\Media\MediaLocation.json读取音乐,而非正确的C:\Media。同时,你的JSON序列化/反序列化实现不够规范,容易引发路径处理问题。
修复步骤
1. 规范JSON序列化与反序列化逻辑
首先确保你的JsonString类定义正确(如果还没定义):
public class JsonString { public string defaultMediaLocation { get; set; } }
然后修正序列化方法,序列化整个对象而非单个属性:
public void SerializeJson(JsonString jsonstring, string path) { using (var writer = new StreamWriter(path)) using (var jsonWriter = new JsonTextWriter(writer)) { var serializer = new JsonSerializer(); serializer.Serialize(jsonWriter, jsonstring); // using块会自动释放资源,无需手动Close和Flush } }
修正反序列化方法,用官方反序列化逻辑替代手动trim引号:
public string ReadJson() { using (var reader = new StreamReader(path)) using (var jsonReader = new JsonTextReader(reader)) { var serializer = new JsonSerializer(); var jsonObj = serializer.Deserialize<JsonString>(jsonReader); return jsonObj?.defaultMediaLocation ?? string.Empty; } }
2. 检查播放音乐的逻辑
找到你播放音乐的代码片段,确保你是使用ReadJson()返回的路径来加载音乐文件,而非误用了JSON文件的路径。例如:
// 正确的用法: string musicFolderPath = ReadJson(); // 遍历音乐文件夹中的文件 foreach (string file in Directory.GetFiles(musicFolderPath, "*.mp3")) { // 加载播放文件 }
避免出现类似错误逻辑:
// 错误示例:把JSON文件路径和Media拼接了 string wrongPath = Path.Combine(path, "Media");
3. 验证初始路径的正确性
注意你初始化的路径@"C:Media\"少了一个反斜杠,应该写成@"C:\Media\",否则会被解析为当前目录下的Media文件夹,而非C盘根目录的Media。
内容的提问来源于stack exchange,提问作者noobice94
相关产品推荐
相关产品推荐

