如何删除 JSON 字符串中的开始和结束双引号以及所有反斜杠 - C#

How to remove opening and closing double quotes and all backslashes in a JSON string - C#

为了使用 C# 执行休息 API 调用,我必须序列化带有参数的字典。这些参数必须作为 JSON 放在请求正文中。

API 调用是在 RestSharp 的帮助下完成的。并使用 fiddler 检查发送字符串。

request.AddBody(_jsonrequeststring);

问题是 API 非常挑剔,它不接受断点(反斜杠)并且不接受 [=42= 开头和结尾的双引号] 字符串。

这就是它的预期:

{
    "ConsumerToken":"aconsumertoken",
    "UserId":"email@web.com",
    "PasswordSha256Base64":"apassword"
}

这就是我要发送的内容:

"{ConsumerToken:\"aconsumertoken\",UserId:\"email@web.com\",PasswordSha256Base64:\"apassword\"}"

我可以删除 \" 但是当它发送该字符串时它也会 returns 一个错误。

"{ConsumerToken:aconsumertoken,UserId:email@web.com,PasswordSha256Base64:apassword}"

甚至可以只删除 \ 和左右双引号吗?如果是这样怎么办?我似乎无法理解它。

完整调用:

userhandler.cs

public static object Login(string uname, string pass, string conTok)
{
    Dictionary<string, string> loginDictionary =
    new Dictionary<string, string>();
    loginDictionary.Add("ConsumerToken", conTok); 
    loginDictionary.Add("UserId", uname);
    loginDictionary.Add("PasswordSha256Base64", pass); 
    string jsonRequestString = JsonConvert.SerializeObject(loginDictionary);

    Proxy proxy = new Proxy(jsonRequestString); 
    return proxy.Execute();
}

Proxy.cs

public class Proxy
{
    const string BaseUrl = "API url";
    const string ActionUrl = "API action url";

    string _jsonrequeststring; 

    public Proxy(string json)
    {
        _jsonrequeststring = json;
    }

    public Object Execute()
    {
        var client = new RestClient(BaseUrl); 
        var request = new RestRequest(ActionUrl); 

        request.RequestFormat = DataFormat.Json;
        request.AddBody(_jsonrequeststring);

        request.Method = Method.POST;
        var response = client.Execute(request);

        var content = response.Content;

        return content;
    }
}

您似乎将正文内容添加为字符串,这意味着它会被 RestSharp 编码为字符串。如果可能,尝试添加对象本身并让 RestSharp 处理序列化等:

var obj = new {
                  ConsumerToken = "aconsumertoken",
                  UserId = "email@web.com",
                  PasswordSha256Base64 = "apassword"
              };
request.AddBody(obj);

如果出于某种原因必须使用预序列化的 JSON 字符串,您应该可以这样做:

request.AddParameter("application/json", _jsonrequeststring, ParameterType.RequestBody);

[注意:我还没有实际测试过这些建议中的任何一个,但我认为它们应该可以解决问题]