首页 > 解决方案 > C# WebClient 在 POST 请求中上传 JSON

问题描述

我有一些 JSON 格式的数据,需要通过 POST 请求发送到网址。数据类似于以下示例:

[
 {
  "Id":0,
  "Name":"John"
 },
 {
  "Id":0,
  "Name": "James"
 }
]

NameValueCollection我通常使用以下方法上传数据没有问题WebClient.UploadValues()

using (WebClient Client = InitWebClient()) // InitWebClient() initialises a new WebClient and sets the BaseAddress and Encoding properties
{
    NameValueCollection Values = new NameValueCollection
    {
        {"Id", "0"},
        {"Name", "John"}
    };
    Client.UploadValues("/api/example", "POST", Values);                
}

然而,由于这个 JSON 请求是一个列表(并且必须始终采用列表的形式,即使只有一个项目被上传),我不知道这是如何完成的。

由于编程限制,我需要使用 WebClient 对象来完成所有这些工作。

标签: c#jsonwebclient

解决方案


有人已经回答了这个问题,但由于某种原因他们的答案被删除了。然而,他们的解决方案是有效的,所以我在下面汇总了一个粗略的实现(它根本不是动态的,但它应该可以帮助遇到与我类似的问题的其他人):

using (WebClient Client = InitWebClient())
{

    List<MyJsonObject> Items = new List<MyJsonObject>();

    // The following could easily be made into a for loop, etc:
    MyJsonObject Item1 = new MyJsonObject() {
        Id = 0,
        Name = "John"
    };
    Items.Add(Item1);
    MyJsonObject Item2 = new MyJsonObject() {
        Id = 1,
        Name = "James"
    };
    Items.Add(Item2);

    string Json = Newtonsoft.Json.JsonConvert.SerializeObject(Items)
    Client.Headers[HttpRequestHeader.ContentType] = "application/json";
    Client.UploadValues("/api/example", "POST", Json);

}

这是将被序列化的对象:

public class MyJsonObject {
    public int Id { get; set; }
    public string Name { get; set; }
}

推荐阅读