2017-08-28 73 views
0

我刚开始测试的API的建立一个框架,我使用specflow用C#和VS.我能够发送请求和接收一个JSON响应,但是当我试图Deserialise我得到一个错误的response.Content。我认为这是因为response.Content字符串具有正斜杠,如下所示。我试图在反序列化之前删除它们,但它不会将其删除,因为我可以在调试模式下看到它。JSON响应在开始时返回一个空字符

错误我得到的是:类型的异常“Newtonsoft.Json.JsonReaderException”发生在Newtonsoft.Json.dll但在用户代码中没有处理

附加信息:分析值意外字符遇到。路径 '',第0行,位置0

respJson - “{” 结果 “:{” isLinked “:真” saleDateTime “:” 16/06/2017 14时20" 分二十零秒, “STORENAME” : “UAT1布莱顿LOC 4”}, “状态”:{ “操作类型”:0, “IsSuccess”:真实的, “ActionString”: “”}}”

方法 - 公共静态动态receiptRetrieve(字符串URI,方法的方法,串 inputJsonFileName,字典inputParams = NULL){

object temp = GetJsonInput(inputJsonFileName, inputParams); 
var response = RestFeedPlugin.SendRequestToEReceiptsAPI(uri, method, null, temp); 


string respJson = response.Content.Replace(@"\", @""); 
dynamic jsonObject = JsonConvert.DeserializeObject(respJson); 

return jsonObject; 

}

我觉得问题是什么。我从RestSharp获得的json响应是在开始时添加一个空格,导致它中断。如果我从response.content中删除第一个字符,它似乎正在工作。然而,这不是一个理想的解决方案,我仍然愿意就这是为什么在第一个地方发生的事情的想法? 临时解决我的问题 -

 var response = client.Execute(request); 
     response.Content = response.Content.Remove(0, 1); 
     client.BuildUri(request); 
+0

我想你需要的是在这里:https://stackoverflow.com/a/13866117/1699071 – SAm

+0

DO因为它使包括作为一个字符串的双引号,我们宣布字符串为“字符串”,因此它会自动使双引号可能的,这就是所谓的转义字符串不能代替反斜线。问题在于你如何反序列化你的Json。为什么你首先有动态类型? – Aizen

+0

其实我觉得问题是什么。 JSON的responseI'm从RestSharp越来越被添加在导致它打破了开始的空间。如果我从response.content中删除第一个字符,它似乎正在工作。然而,这不是一个理想的解决方案,我仍然愿意就这是为什么在第一个地方发生的事情的想法? – Fishyish

回答

0

这些反斜线逃避里面的文字撇号。他们打算在那里。你的程序正常工作而不删除他们:

using System; 
using Newtonsoft.Json; 

public class Program 
{ 

    public static void Main() 
    { 
     string json = "{\"Result\":{\"isLinked\":true,\"saleDateTime\":\"16/06/2017 14:20:20\",\"storeName\":\"UAT1 BRIGHTON LOC 4\"},\"Status\":{\"ActionType\":0,\"IsSuccess\":true,\"ActionString\":\"\"}}"; 
     dynamic jsonObject = JsonConvert.DeserializeObject(json); 

     Console.WriteLine(jsonObject); 
    } 
} 

你可以看到它在这里的行动:https://dotnetfiddle.net/rJwaJM