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

标签 c# .net json restsharp

为了使用 C# 执行 REST API 调用,我必须使用参数序列化字典。这些参数必须以 JSON 形式放置在请求正文中。

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

request.AddBody(_jsonrequeststring);

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

所以这是它的期望:

{
    "ConsumerToken":"aconsumertoken",
    "UserId":"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="dbbeb6bab2b79bacbeb9f5b8b4b6" rel="noreferrer noopener nofollow">[email protected]</a>",
    "PasswordSha256Base64":"apassword"
}

这就是我要发送的内容:

"{ConsumerToken:\"aconsumertoken\",UserId:\"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a2c7cfc3cbcee2d5c7c08cc1cdcf" rel="noreferrer noopener nofollow">[email protected]</a>\",PasswordSha256Base64:\"apassword\"}"

我可以删除\",但是当它发送该字符串时,它也会返回错误。

"{ConsumerToken:aconsumertoken,UserId:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="07626a666e6b477062652964686a" rel="noreferrer noopener nofollow">[email protected]</a>,PasswordSha256Base64:apassword}"

是否可以只删除\以及左右双引号?如果是的话怎么办?我似乎无法理解它。

完整的调用:

用户处理程序.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 = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="791c14181015390e1c1b571a1614" rel="noreferrer noopener nofollow">[email protected]</a>",
                  PasswordSha256Base64 = "apassword"
              };
request.AddBody(obj);

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

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

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

关于c# - 如何删除 JSON 字符串中的开始和结束双引号以及所有反斜杠 - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37158346/

相关文章:

c# - 如何从 C# 调用此 delphi .dll 函数?

c# - 创建多次执行的应用程序服务调用

c# - ASP.NET Core AsyncActionFilter 记录 ActionArguments 和结果

c# - 基于字典排序 IEnumerable<T> 对象

c# - 枚举类模式是否与 DI 不兼容?

c# - 如何使用 .NET 获取月份的最后一个星期五

javascript - 在 JavaScript 中传递字符串作为参数

java - Java 中内存缓存的 String 的唯一表示形式

php - 在 Angularjs 中将 JSON 数据插入数据库

c# - 将两个包含属性的对象合并为一个对象