控制台应用程序中的反序列化值

时间:2017-08-22 06:44:18

标签: c# asp.net c#-4.0 serialization json.net

我在Windows应用程序中将JSON值传递给args参数中的控制台应用程序,并尝试在类对象中对其进行反序列化,但是在执行此操作时给出了错误,

  

解析值时遇到意外的字符:L。路径'Line1',   第1行,第8位。

我正在使用JSON.NET库来执行此操作。以下是我的代码,

Windows应用程序,

Address address = new Address() { Line1 = "Line 1", Line2 = "Line 2" };
string json = JsonConvert.SerializeObject(address);
Process compiler = new Process();
compiler.StartInfo.FileName = @"D:\Learning\Console\ValidateAddress\ValidateAddress\bin\Debug\ValidateAddress.exe";
compiler.StartInfo.Arguments = json;
compiler.StartInfo.UseShellExecute = false;
compiler.StartInfo.RedirectStandardOutput = true;
compiler.Start();
compiler.WaitForExit();
button1.Text = compiler.StandardOutput.ReadToEnd();

控制台应用程序,

Address m = JsonConvert.DeserializeObject<Address>(args[0]);
System.IO.File.WriteAllText(@"D:\path.txt", args[0]);
Console.WriteLine(args[0]);

在控制台应用程序中,args [0]参数在文本文件中打印低于值

  

{Line1:Line 1,Line2:Line 2}

在字符串值中,它没有获得双引号。 (第1行,而不是“第1行”)

在Windows应用程序中,我收到字符串

  

“{Line1:Line 1,Line2:Line 2} \ r \ n”

我需要在反序列化期间对控制台应用程序进行更改才能使其正常工作?

1 个答案:

答案 0 :(得分:0)

原因是传递给程序的参数遵循自己的规则。

特别是,引号表示不应进一步拆分的参数,直到下一个引用结束字符串。因此,您看到删除的引号既符合逻辑又符合预期。

你可以引用引号,但我不知道确切的语法,也许更好的答案会告诉你如何在将它作为参数传递之前转义字符串。

一个简短的实验表明你需要通过添加另一个双引号来转义双引号,然后将整个json封装在一组双引号中。

例如:

test.exe { "a": "b" }

收到4个参数:

  1. {
  2. a:
  3. b
  4. }
  5. 而这:

    test.exe "{ ""a"": ""b"" } "
    

    收到了

    1. { "a": "b" }
    2. 我不会通过参数将json发送到其他程序,我会将其作为标准输入传输,或者通过文件提供。

相关问题