子进程接收端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
相关产品推荐
相关产品推荐

