我有一个应用程序,它为执行长时间运行的作业创建了一个新进程(子进程)。我需要将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
属性传递。