Unity或者其他程序启动C#的控制台程序传递参数出错
主机启动代码
string exePath = path + ProConst.ProgramPath_GenerateReportExe;//设置exe启动的路径
string data = JsonConvert.SerializeObject(GameManager.Instance._UserTrainingDataEntities);//将对象转成json
Process.Start(exePath, data);//启动程序
从机代码
static void Main(string[] args){if (args.Length == 0){Console.WriteLine("无任何启动参数");Console.Read();return;}userdata = JsonConvert.DeserializeObject<UserTrainingDataEntities>(data);}
在从机的
userdata = JsonConvert.DeserializeObject<UserTrainingDataEntities>(data);
会报错,理由是Json序列化失败,经过检查发现传递过来的参数的引号全部都没有了
原始数据
{"StudentName":1,"StudentClass":11,"StudentGrades":null}
传到程序中获取的参数就成了
{StudentName:1,StudentClass:11,StudentGrades:null}
解决方式
使用一个字符串替换引号,然后在从机将替换的字符串替换为引号,这个符号是不能在初始的字符串中出现的
修改代码如下,
主机
string exePath = path + ProConst.ProgramPath_GenerateReportExe;//设置exe启动的路径
string data = JsonConvert.SerializeObject(GameManager.Instance._UserTrainingDataEntities);//将对象转成jsondata = data.Replace("\"","~");
Process.Start(exePath, data);//启动程序
从机
static void Main(string[] args){if (args.Length == 0){Console.WriteLine("无任何启动参数");Console.Read();return;}string data = args[0].Replace("~", "\"");userdata = JsonConvert.DeserializeObject<UserTrainingDataEntities>(data);}