我正在尝试从C#代码调用exe,并且我需要传递2个数组(array1,array2),1个N×3矩阵(M1)和2个数字(int1,double2)。我发现了一个与我相似的问题:How to send multiple parameters to exe from c# code
ProcessStartInfo startInfo = new ProcessStartInfo(string.Concat(exePath, "abc.exe"));
string[] cParams = new string[] { "dev", "Line1", "1" };
startInfo.Arguments = string.Format("-e {0} -l {1} -q {2}", cParams);有人能告诉我如何解决我的问题吗?非常感谢!
发布于 2015-12-10 15:09:57
参数始终是字符串。通过参数将数组或矩阵传递给程序的唯一方法是将其转换为字符串。请注意,您的目标应用程序也应该使用此格式,并且必须将其反序列化。
现在,这取决于您的实现。对我来说,我推荐使用JSON和JSON.NET库:
// Serialize array to a string
int[] vals = new int[] { 1, 2, 3, 4, 5 };
string valsArgument = JsonConvert.SerializeObject(vals); // "[1,2,3,4,5]"
// In your target application
int[] vals = JsonConvert.DeserializeObject<int[]>(argument1);数组已从调用的应用程序传输到被调用的应用程序。
请注意,以这种方式使用参数可能不是一个好主意。可能,您需要使用外部文件或其他文件。
发布于 2015-12-10 15:10:23
一个concole应用程序(我假设您会提到它)可以处理以字符串数组形式提供的任意数量的参数。这就是你的数组的问题:除了简单的字符串,你不能传递任何不同的东西。因此,您可以展平您的数组,但您将丢失所有参数属于一起的信息。您可能会为每个数组添加一个长度参数,但我猜这会变得非常烦人:myapp.exe v11 v12 v13 3 v21 v22 2 v33 v34 v35 v36 4,这意味着类似于
获取前三个参数并将它们连接到一个数组中,然后对下面的两个和四个参数执行相同的操作
相反,您可以将所有这些参数写入一个反映参数结构的外部文件(JSON、XML),并使用某种反序列化在您的应用程序中读取它们。
发布于 2018-11-01 18:15:25
您可以在.NET中使用DataContractJsonSerializer将段落序列化为字符串。Here就是一个例子。
// Create a User object and serialize it to a JSON stream.
public static string WriteFromObject()
{
//Create User object.
User user = new User("Bob", 42);
//Create a stream to serialize the object to.
MemoryStream ms = new MemoryStream();
// Serializer the User object to the stream.
DataContractJsonSerializer ser = new
DataContractJsonSerializer(typeof(User));
ser.WriteObject(ms, user);
byte[] json = ms.ToArray();
ms.Close();
return Encoding.UTF8.GetString(json, 0, json.Length);
}
// Deserialize a JSON stream to a User object.
public static User ReadToObject(string json)
{
User deserializedUser = new User();
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
DataContractJsonSerializer ser = new
DataContractJsonSerializer(deserializedUser.GetType());
deserializedUser = ser.ReadObject(ms) as User;
ms.Close();
return deserializedUser;
}https://stackoverflow.com/questions/34195628
复制相似问题