【问题标题】:How to post a JSON Array of Objects in RestSharp如何在 RestSharp 中发布 JSON 对象数组
【发布时间】:2019-12-06 17:06:55
【问题描述】:

我需要传递一个 JSON 对象数组,下面是它在 JSON 中应该是什么样子的示例:

   "categories": [
    {
      "id": 9
    },
    {
      "id": 14
    }
  ],

我不知道如何自己完成,我尝试使用 Restsharp 的 request.AddBody()request.AddParameter() 但它没有让我到任何地方 =/

var request = new RestRequest();
request.AddParameter("name", name);
// Category
request.AddParameter("categories", "categories here");
var response = client.Post(request);

【问题讨论】:

  • sn-p 看起来不像是有效的 JSON。是否缺少包含“{}”?
  • "建议使用 AddJsonBody 或 AddXmlBody 方法代替 BodyParameter 类型的 AddParameter。这些方法将设置正确的请求类型并为您完成序列化工作。" from RestSharp WIKI
  • @Fildor JSON 中有什么无效的内容?你最后说的是逗号吗?如果是这样,这是一个错字。
  • 并且使用基于 Int 的列表,在使用 AddJsonBodyAddParameter 传递它时效果不佳
  • @CodingCode 您是要仅发布数组(方括号中的部分),还是要发布具有名为“类别”的属性的对象,该属性包含一个数组?

标签: c# asp.net json rest restsharp


【解决方案1】:

这应该可行:

request.RequestFormat = DataFormat.Json; // Important

var input = new Dictionary<string, object>();
// cats can be an array on real objects too
var cats = new[] {new {id = 9}, new {id = 14}};
input.Add("categories", cats);

request.AddBody(input);

【讨论】:

    【解决方案2】:

    创建一个类并为其命名

    class MyObject
    {
       private int id;
       public MyObject(int id)
       {
         this.id = id;
       }
    }
    

    将你的类定义为一个对象

    MyObject obj = new MyObject(9);
    

    现在使用 Newtonsoft.Json 序列化您的对象

    string result = JsonConvert.SerializeObject(obj);
    

    现在将其添加到数组中

    var resArray = new object[] { result };
    

    在下面找到完整的代码

        class MyObject
        {
           private int id;
           public MyObject(int id)
           {
             this.id = id;
           }
        }
    
    
    using Newtonsoft.Json;
    using RestSharp;
    class Main
    {
        MyObject obj = new MyObject(9);
        MyObject obj1 = new MyObject(14);
        string result = JsonConvert.SerializeObject(obj);
        string result1 = JsonConvert.SerializeObject(obj1);
    
        var resArray = new object[] { result ,result1};
    
        ServicePointManager.SecurityProtocol |= SecurityProtocolType.Ssl3 | 
        SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | 
        SecurityProtocolType.Tls;
    
        var client = new RestClient("http://127.0.0.1:8080");
        var request = new RestRequest("category", Method.POST);
    
        request.AddHeader("Content-Type", "application/json");
              
        request.AddJsonBody(new
        {
             categories = resArray,      
         }) ;
    
        var response = client.Execute(request);
    
        MessageBox.Show(response.IsSuccessful.ToString());
             
        MessageBox.Show(response.Content);
    
    }
    

    【讨论】:

      【解决方案3】:

      如果我理解正确,您想发布一个 JSON 数组。如果您不想手动形成 JSON 字符串,最简单的方法是使用 Newtonsoft.Json

      这里有一个例子:

      List<int> data = new List<int>() // This is your array
      
      string JsonData = JsonConvert.SerializeObject(data);
      
                  HttpClient client = new HttpClient();
                  client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                  StringContent content = new StringContent(JsonData, Encoding.UTF8, "application/json");
      
                  HttpResponseMessage result = await client.PostAsync("your adress", content);
      

      这是向服务器发出 POST 请求的简单方法。

      要阅读您可以使用的响应:

      string answer = await result.Content.ReadAsStringAsync();
      

      【讨论】:

      • 我试图结合这里的答案来完成它,遗憾的是它没有用。我只使用了您的序列化提示,我想我还需要检查您的请求代码。
      猜你喜欢
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多