C# WebClient 在 POST 请求中上传 JSON

标签 c# json webclient

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

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

我通常可以使用 WebClient.UploadValues() 方法将数据作为 NameValueCollection 上传:

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

最佳答案

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

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

关于C# WebClient 在 POST 请求中上传 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51965043/

相关文章:

c# - 具有任意缩放中心的 XNA 2d 相机

c# - 添加到带有位置的可滚动面板

json - 如何使用 Groovy 代码删除响应正文中 Gerrit 的 REST API 的魔术前缀?

c# - 如何使用 dotnet(nuget 包)httpclient 配置 TCP 连接数?

c# - 如何从控制台应用程序将文件上传到 ASP.NET MVC

c# - Git mega 压缩具有相同消息和作者的所有顺序提交

c# - wcf service hosting on windows服务安装报错

c# - 为什么我的 .net 应用程序不会发出 10 个以上的并发 WebClient 请求?

javascript - JSON @attributes 和@association 级别与 js 和/或 angularjs

android - 如何通过改造解析具有相同键的不同数据类型的对象的json数组