【问题标题】:Unexpected character encountered while parsing value: C. Path '', line 1, position 2解析值时遇到意外字符:C. Path '', line 1, position 2
【发布时间】:2018-11-20 08:59:23
【问题描述】:

我有一个由以下代码构造的 json 字符串:

string path1 = "C:\\Program Files (x86)\\IMAGE\\model\\net.mat";
string path2 = "C:\\Program Files (x86)\\IMAGE\\png\\Lab.png";
string path3 = "D:\\temp\\";
string[] strs={path1 ,path2 ,path3};
string json = JsonConvert.SerializeObject(strs);
Console.WriteLine(json);

List<string> paths = JsonConvert.DeserializeObject<List<string>>(json);
Console.WriteLine(paths.Count);

我序列化或反序列化时没有错误。 json 字符串如下:

 "[\"C:\\\\Program Files (x86)\\\\IMAGE\\\\model\\\\net.mat\",\"C:\\\\Program Files (x86)\\\\IMAGE\\\\png\\\\Lab.png\",\"D:\\\\temp\\\\\"]"

然后我将字符串 JSON 传递给 *.exe 文件并对其进行反序列化。 exe收到的字符串如下,pass后发生了变化:

string json="[C:\\\\Program Files (x86)\\\\IMAGE\\\\model\\\\net.mat,C:\\\\Program Files 
    (x86)\\\\IMAGE\\\\png\\\\Lab.png,D:\\\\temp\\]";

然后当我使用以下代码反序列化它时,出现错误。代码如下:

List<string> paths = JsonConvert.DeserializeObject<List<string>>(json);

错误是:

未处理的 JsonReaderException:解析值时遇到意外字符:C. 路径'',第 1 行,位置 2。

我想知道为什么会这样。谢谢。

【问题讨论】:

  • [C:\\Program Files (x86)\\IMAGEDL\\model\\net-e-100.mat,C:\\Program Files (x86)\\IMAGEDL\\Labelpng\\Lab.png,D:\\temp\] 不是格式良好的 JSON。字符串需要被" 字符包围。尝试将其上传到jsonlint.com,您将获得Error: Parse error on line 1:。有效的 JSON 看起来像 ["C:\\Program Files (x86)\\IMAGEDL\\model\\net-e-100.mat", "C:\\Program Files (x86)\\IMAGEDL\\Labelpng\\Lab.png", "D:\\temp"]。如果这不是您的问题中的拼写错误,并且您的 JSON 确实没有围绕您的字符串的双引号分隔符,那就解释了您的问题。
  • 顺便说一句,您的string json = "... c# 代码无法编译,因为 c# 字符串文字不能包含换行符。那么您能否确认您的问题确实包含您尝试反序列化的 JSON?
  • 您如何将 JSON 字符串传递给您的 EXE?
  • @BrianRogers 我使用以下代码将JSON字符串传递给EXE: string[]pathArr={modelPath, labelPath, resultPath};//构造字符串数组 string paths = JsonConvert.SerializeObject(pathArr );//转换成JSON字符串 Process pro = new Process();//然后传给一个exe pro.StartInfo.FileName = fullFileName; pro.StartInfo.Arguments = string.Format("{0}", paths);
  • 传递给EXE的必须是JSON吗?如果 JSON 中唯一的东西是三个路径的数组,您可以将它们作为三个单独的命令行参数传递吗?

标签: json.net exe


【解决方案1】:

您必须在路径周围加上单引号。

string json = "[ 'C:\\Program Files (x86)\\IMAGEDL\\model\\net-e-100.mat',C:\\Program Files(x86)\\IMAGEDL\\Labelpng \\Lab.png, D:\\temp\\ ]";

【讨论】:

  • 感谢您的帮助。当我将 json 字符串传递给可执行文件 (*.exe) 时,会出现此问题。当我在单个程序文件中使用它时,没有问题。我改变了我的问题以避免误解。再次感谢。
猜你喜欢
  • 2022-11-05
  • 1970-01-01
  • 2022-11-05
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
  • 2020-03-19
  • 1970-01-01
相关资源
最近更新 更多