我的服务返回一个Json字符串,该字符串存储在数据库中,稍后通过计划任务检索为"命令参数"。
string[] args = Environment.GetCommandLineArgs();
结果如下所示......
args[0] = {Name:Khan, Address: Ny} // no longer a valid json object
正如你所看到的,它没有任何关于属性名称的qoutes,所以我不能将它序列化/反序列化为c#对象。那么如何将该字符串转换为如下所示
{"Name":"Khan", "Address": "Ny"}
Javascript有Stringify方法,如何在c#中完成此操作?
答案 0 :(得分:1)
如上所述:Getting raw (unsplit) command line in .NET您可以尝试使用Environment.CommandLine。请注意,它确实包含您必须删除的程序名称。
您可以使用以下内容进行拆分:
string str = Environment.CommandLine;
if (str.StartsWith("\"") && str.Length > 1) {
int ix = str.IndexOf("\"", 1);
if (ix != -1) {
str = str.Substring(ix + 1).TrimStart();
}
} else {
int ix = str.IndexOf(" ");
if (ix != -1) {
str = str.Substring(ix + 1).TrimStart();
}
}
这处理引用exe文件的两种情况:
“MyProgram.exe”somearguments
并且exe文件是不加引号的
MyProgram.exe somearguments
答案 1 :(得分:1)
免责声明:修复输入会好得多......
如果你真的需要解析它,你可以用一个带引号的等效版本替换分隔符。只有当每个元素都是字符串但是需要引号时,这才会有效。
var str = "{Name:Khan, Address: Ny}";
Console.WriteLine(str.Replace("{", "{\"")
.Replace("}", "\"}")
.Replace(",", "\", \"")
.Replace(":", "\":\""));
输出
{"Name":"Khan", " Address":" Ny"}