下面只是一个功能的例子。如何以正确的json字符串作为参数启动.exe?
我有这样一个模型:
public class StartParams
{
public string ParameterOne { get; set; }
public string ParameterTwo { get; set; }
public string ParameterThree { get; set; }
}
从一个WPF应用程序。我序列化它作为JSON这样的:
var startParams = new StartParams
{
ParameterOne = "parameterOne",
ParameterTwo = "parameterTwo",
ParameterThree = "parameterThree"
};
var jsonStartParams = JsonConvert.SerializeObject(startParams);
然后我发起与JSON字符串作为参数的.exe文件。
ProcessStartInfo info = new ProcessStartInfo
{
Arguments = jsonStartParams,
FileName = "C:\\Folder\\File.exe"
};
Process.Start(info);
在的file.exe我有一个任务,这需要字符串:
public static async Task DoSomething(string jsonStartParams)
{
var startParams = JsonConvert.DeserializeObject<StartParams>(jsonStartParams);
调试时,我可以调用静态Main方法中的file.exe这样的:
string[] parameters = {jsonStartParams};
File.Program.Main(parameters);
这个工程就像一个魅力,但只要我用Process.Start调用带有JSON字符串参数的.exe文件,它就会失败,并返回
Newtonsoft.Json.JsonReaderException
在JSON对象的第一支柱。
有人能请我指出一个解决方案的正确方向吗?
谢谢!
我不认为你应该试图做到这一点。正确地转义Windows命令字符串非常困难。下面的答案不会有帮助。相反,将JSON字符串保存为TEMP文件并将文件名用作参数 - 或者通过标准输入将它传入.exe – Jacob