【发布时间】: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 中唯一的东西是三个路径的数组,您可以将它们作为三个单独的命令行参数传递吗?