gpt4 book ai didi

c# - RestSharp 中的对象到 JSON 问题

转载 作者:行者123 更新时间:2023-11-30 15:18:19 26 4
gpt4 key购买 nike

我正在使用的 Rest API 有一个名为 Api-Key 的新字段。这不是一个有效的 C# 字段名称,所以我想知道是否有不同的构建主体的方法。

   var client = new RestClient("https://TestWeb");

var request = new RestRequest("login", Method.POST);
request.AddHeader("Content-type", "application/json");

request.AddJsonBody(
new {
credentials =
new
{
username = "Uname",
password = "password",
Api-Key = "apikey"
} });

最佳答案

由于 RestSharp 使用默认的 Json 序列化器 SimpleJson,据我所知,它不支持改变序列化行为的属性,我会:

  1. 作为 NuGet 包安装 Newtonsoft Json ,以便使用其 JsonProperty 属性。

  2. 定义一个类来提供这样的身份验证对象:

    public class AuthenticationInfos
    {
    [JsonProperty(PropertyName = "username")]
    public string Username { get; set; }

    [JsonProperty(PropertyName = "password")]
    public string Password { get; set; }

    [JsonProperty(PropertyName = "Api-Key")]
    public string ApiKey { get; set; }
    }

(关键部分在这里[JsonProperty(PropertyName = "Api-Key")],你告诉序列化器用那个名字序列化那个属性,它作为一个C#变量是无效的)

  1. 使用Newtonsoft Json序列化对body请求进行序列化:

    var client = new RestClient("https://TestWeb");

    var request = new RestRequest("login", Method.POST);
    request.AddHeader("Content-type", "application/json");

    var body = new
    {
    credentials =
    new AuthenticationInfos()
    {
    Username = "Uname",
    Password = "password",
    ApiKey = "myApiKey"
    }
    };

    var serializedBody = JsonConvert.SerializeObject(body);
    request.AddParameter("application/json", serializedBody, ParameterType.RequestBody);

body 会是这样的:

{
"credentials":
{
"username": "Uname",
"password": "password",
"Api-Key": "myApiKey"
}
}

当然,在接收消息时,您在反序列化阶段也必须这样做。

关于c# - RestSharp 中的对象到 JSON 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44122398/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com