C#WebClient在POST请求中上传JSON

时间:2018-08-22 10:41:34

标签: c# json webclient

我有一些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对象来完成所有这些操作。

1 个答案:

答案 0 :(得分:0)

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

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; }
}