Environment.GetCommandLineArgs()从Json String中删除引号

时间:2015-02-25 08:02:45

标签: c# json

我的服务返回一个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#中完成此操作?

2 个答案:

答案 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"}

Example