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

.NET 4.6.2下Newtonsoft.Json序列化遇PathTooLongException求助

解决.NET 4.6.2下Newtonsoft.Json序列化的PathTooLongException问题

首先排查最可能的低级错误:参数传递错误

你的Serialize方法第二个参数被命名为json,但代码中是将其作为StreamWriter的文件路径使用。如果调用该方法时,你误将JSON字符串内容而非目标文件路径传给了这个参数,必然会触发PathTooLongException——因为JSON内容本身就是超长字符串,当成路径肯定超出Windows的路径长度限制。

先确认调用代码:确保第二个参数是合法的文件路径,而非JSON文本。


如果确实是文件路径过长,按以下方案处理

方案1:修复App.config配置,启用完整的长路径支持

.NET 4.6.2中,启用长路径支持需要同时设置两个开关,且配置必须包裹在<configuration>节点内。修改你的App.config为:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false" />
  </runtime>
</configuration>

此配置对.NET框架类库生效,Newtonsoft.Json依赖的StreamWriter会受此配置影响。

方案2:手动添加长路径前缀

如果配置不生效,可以手动给绝对路径添加Windows长路径前缀:

  • 本地路径:在路径前添加\\?\,例如C:\long\path\file.json改为\\?\C:\long\path\file.json
  • UNC路径:在路径前添加\\?\UNC\,例如\\server\share\file.json改为\\?\UNC\server\share\file.json

修改你的序列化方法如下:

private static void Serialize(object obj, string filePath)
{
    string longPath = filePath;
    // 处理长路径前缀,仅支持绝对路径
    if (!longPath.StartsWith(@"\\?\"))
    {
        if (longPath.StartsWith(@"\\"))
        {
            // 转换UNC路径
            longPath = @"\\?\UNC\" + longPath.Substring(2);
        }
        else
        {
            // 转换本地绝对路径
            longPath = @"\\?\" + longPath;
        }
    }

    var serializer = new JsonSerializer();
    using (var sw = new StreamWriter(longPath))
    using (JsonWriter writer = new JsonTextWriter(sw))
    {
        serializer.Serialize(writer, obj);
    }
}

方案3:缩短文件路径

最直接的方式是将目标文件移动到更短的路径下,比如根目录、使用更短的文件夹名称,确保整个路径长度不超过Windows默认的260字符限制。


额外注意:确认方法功能是否匹配需求

你提到“将JSON字符串序列化到对象中”,但当前代码是将对象序列化为JSON文件(序列化操作)。如果你的实际需求是将JSON字符串反序列化为对象,应该使用StringReader而非StreamWriter,此时不需要涉及文件路径,也就不会触发路径异常。正确的反序列化代码示例:

private static T Deserialize<T>(string json)
{
    var serializer = new JsonSerializer();
    using (var sr = new StringReader(json))
    using (JsonReader reader = new JsonTextReader(sr))
    {
        return serializer.Deserialize<T>(reader);
    }
}

内容的提问来源于stack exchange,提问作者Kresten

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:45:35