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

子进程接收端JSON序列化双引号缺失问题求助

问题根源与解决办法

问题出在命令行参数的解析逻辑上:当你直接把带双引号的JSON字符串赋值给Process.StartInfo.Arguments时,操作系统的命令行解释器会把双引号识别为参数的分隔/包裹符号,自动将其剥离,导致子进程收到的JSON丢失了引号。

具体解决步骤

方案1:手动转义并包裹外层引号

给序列化后的JSON字符串包裹一层双引号,同时把内部的双引号转义(用\"代替"),这样命令行解析器会把整个JSON当作一个完整参数传递:

string GetStringData(ProcessJobModel pjm)
{
    string jobDataString = JsonConvert.SerializeObject(pjm, Formatting.None);
    // 转义内部双引号并包裹外层引号
    return $"\"{jobDataString.Replace("\"", "\\\"")}\"";
}

方案2:使用ArgumentList(推荐)

ProcessStartInfo.ArgumentList是专门用来传递参数的集合,它会自动处理参数的转义和包裹,不需要手动处理引号:

Process process = new Process();
// 直接把JSON字符串添加到ArgumentList,系统会自动处理转义
process.StartInfo.ArgumentList.Add(GetStringData(pjm));

子进程接收端注意事项

如果用ArgumentList传递,子进程的Main方法里直接取args[0]就能拿到完整的JSON字符串;如果用手动转义的方式,也要确保子进程接收时取的是整个第一个参数(不要拆分)。

可以在子进程里先打印args[0]的完整内容,验证是否和父进程序列化后的JSON一致,再进行反序列化操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:55:15