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