如何正确启动带有json字符串的.exe作为参数?

时间:2017-10-20 11:40:32

标签: c# json parameters process

以下只是功能的一个示例。

我有一个这样的模型:

Threads: 10
Ramp up: 1
Duration: 300 seconds

来自WPF应用。我将它序列化为JSON,如下所示:

public class StartParams
{
    public string ParameterOne { get; set; }
    public string ParameterTwo { get; set; }
    public string ParameterThree { get; set; }
}

然后我将以JSON字符串作为参数启动.exe文件。

var startParams = new StartParams
{
    ParameterOne = "parameterOne",
    ParameterTwo = "parameterTwo",
    ParameterThree = "parameterThree"
};

var jsonStartParams = JsonConvert.SerializeObject(startParams);

File.exe 中,我有一个带字符串的任务:

ProcessStartInfo info = new ProcessStartInfo
{
    Arguments = jsonStartParams,
    FileName = "C:\\Folder\\File.exe"
};

Process.Start(info);

调试时,我可以像这样调用File.exe中的静态Main方法:

public static async Task DoSomething(string jsonStartParams)
{
    var startParams = JsonConvert.DeserializeObject<StartParams>(jsonStartParams);

这就像一个魅力,但是一旦我用Process.Start调用.exe文件,使用JSON字符串参数,它就会失败

  

Newtonsoft.Json.JsonReaderException

在JSON对象的第一个道具上。

有人可以指出我正确的解决方案吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

jsonStartParams中的引号使参数分为多个参数。尝试转义这样的引号:

ProcessStartInfo info = new ProcessStartInfo
{
    Arguments = "\"" + jsonStartParams.Replace("\"",  "\\\"") + "\"",
    FileName = "C:\\Folder\\File.exe"
};

答案 1 :(得分:-1)

您可能需要转义JSON字符串

类似这样的事情

JsonSerializerSettings settings = new JsonSerializerSettings
{
    StringEscapeHandling = StringEscapeHandling.EscapeHtml
};

var jsonStartParams = JsonConvert.SerializeObject(startParams, settings);