【问题标题】:Error with parsing JSON content within RestSharp & C#在 RestSharp 和 C# 中解析 JSON 内容时出错
【发布时间】:2021-06-03 13:39:12
【问题描述】:

我正在尝试使用 RestSharp 发布一些数据,但是在 IRestResponse 响应中我的 JSON 内容出现错误。

错误: "{"status":"error","message":"第 1 行第 96 列的输入 JSON 无效:意外字符 ('e' (代码 101)):期望用逗号分隔对象条目",...} "

从消息中我假设我在“内容”行的末尾缺少一个逗号来分隔对象,但不知道该怎么做?还是我需要将我的名称/值对放入它们自己的对象中?

var client = new RestClient("https://api.com/APIKEY");
var request = new RestRequest(Method.POST);
request.AddHeader("accept", "application/json");
request.AddHeader("content-type", "application/json");

request.AddParameter("application/json", "{\"properties\":{" +
"\"pipeline\":\"0\"," +
"\"content\":\"<b>Email: </b>\"" + user.Email + "\"<br/><b>Error: </b>\"" + string.Join("<br/>", type.Name.Split(',').ToList()) + "\"<br/><b>UserId: </b>\"" + user.userId + "\"<br/><b>RequestId: </b>\"" + callbackData.idReference + 
"\"subject\":\"Error for\"" + user.FirstName + " " + user.LastName +                
"\"owner_id\":\"001\"}}", ParameterType.RequestBody);

IRestResponse response = client.Execute(request);

【问题讨论】:

  • 请不要像这样手动构建 JSON。容易出错!
  • 不要手动创建json。
  • AddParameter 似乎没有将其添加到请求的正文中,因为它应该用于 POST。查看名为AddJsonBody 的方法是否有帮助。
  • 感谢您的建议。我将它用于集成,文档建议使用 AddParameter 但我将改为查看 AddJsonBody。我还将考虑使用 JsonConvert 并改用该对象。

标签: c# json restsharp


【解决方案1】:

您永远不应该手动构建自己的 JSON!您应该使用(匿名)对象和专用的 JSON 序列化器,例如 Json.Net。

话虽如此,RestSharp 允许您将对象指定为 AddParameter 的参数值,但您可能应该将 AddJsonBody 用于请求正文。

在您的手动 JSON 生成中存在几个错误,例如在 "content""subject" 行的末尾缺少引号和逗号。

    var client = new RestClient("https://api.com/APIKEY");
    var request = new RestRequest(Method.POST);
    request.AddHeader("accept", "application/json");
    request.AddHeader("content-type", "application/json");

    var parameter = new 
    {
        properties = new {
            pipeline = "0",
            content = $"<b>Email: </b>\"{user.Email}\"<br/><b>Error: </b>\"{string.Join("<br/>", type.Name.Split(',').ToList())}\"<br/><b>UserId: </b>\"{user.userId}\"<br/><b>RequestId: </b>\"{callbackData.idReference}",
            subject = $"Error for \"{user.FirstName} {user.LastName}\"",
            owner_id = "001"
        }
    };
    
    request.AddJsonBody(parameter)

    IRestResponse response = client.Execute(request);

这样做更不容易出错。

【讨论】:

  • 谢谢,我将在接下来的几个晚上更详细地了解 JSON - 感谢您的帮助!
猜你喜欢
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
相关资源
最近更新 更多