子进程,JSON序列化在接收端缺少双引号



我有一个应用程序,它为执行长时间运行的作业创建了一个新进程(子进程)。我需要将JSON字符串作为参数值从parent process传递给child process

根据我的观察,从logs调试时,发现serialization输出看起来不错,但在子进程的接收端,双引号丢失了!这将导致无法反序列化。

JSON字符串序列化后,作为参数传递给进程

{"key1":"value1","key2":"value2","key3":"value3","key4":"value4"}

子进程接收端JSON字符串

{key1:value1,key2:value2,key3:value3,key4:value4}

序列化方法,使用NewtonSoft库,

string GetStringData(ProcessJobModel pjm)
{
string jobDataString = JsonConvert.SerializeObject(pjm, Formatting.None); 
return jobDataString;
}

作为值传递给子进程,

Process process = new Process();
process.StartInfo.Arguments = GetStringData(pjm);

我假设我们应该能够传递序列化的JSON数据,因为参数只需要一个字符串值。我可能在这里遗漏了一些东西,我会感谢任何可以指导我的人。

包含空格的单个参数必须用引号括起来,但是这些引号不会传递到目标应用程序。要在最后解析的参数中包含引号,必须使用triple-escape对每个标记加引号。从。net文档中,

ProcessStartInfo startInfo = new ProcessStartInfo("myApp1.exe");
startInfo.Arguments = "/a /b:"""quoted string"""";

然而,通过这种方法将JSON传递给另一个可执行文件是非常容易出错的。相反,您必须将JSON写入某个临时文件,并且只将该文件的路径传递给被调用的可执行文件。因为,即使你对它进行编码并传递,也只有32kb的最大长度可以通过这个Arguments属性传递。

相关内容

  • 没有找到相关文章

最新更新