在 RestSharp 和 C# 中解析 JSON 内容时出错

Error with parsing JSON content within RestSharp & C#

我正在尝试使用 RestSharp POST 一些数据,但是我在 IRestResponse 响应中的 JSON 内容遇到错误。

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

根据消息,我假设我在“内容”行的末尾缺少一个逗号来分隔对象,但不知道该怎么做?或者我需要将我的 name/value 对放入它们自己的对象中吗?

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 序列化程序,例如 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);

这样做更不容易出错。