You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 19:52:48