以下只是功能的一个示例。
我有一个这样的模型:
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对象的第一个道具上。
有人可以指出我正确的解决方案吗?
谢谢!
答案 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);