带有包含数组的 Json 的 C# POST 请求
Posted
技术标签:
【中文标题】带有包含数组的 Json 的 C# POST 请求【英文标题】:C# POST request with Json containing an array 【发布时间】:2021-05-06 22:05:51 【问题描述】:我过去一直在使用一些简单的请求来发送 JSON,并且它们运行良好。我基本上采用简单的字符串,使用 将其转换为 UTF-8 byte[] byteArray = Encoding.UTF8.GetBytes(postData); 并使用 HttpWebRequest 发送。
现在我收到了一个任务来发送一个新的 POST 请求,该请求将有一个 Id 数组并且是类型
"GroupID": "Named_ID",
"ChildIds": [
"76197272-24E4-4DD2-90B8-46FDDCC0D6CA",
"D2B3A1AC-ACF6-EA11-A815-000D3A49E4F3",
"ED53D968-00F4-EA11-A815-000D3A49E4F3"
]
ChildIds 在我的 List(String []) 中可用。我可以遍历记录并创建一个类似的长字符串,然后在 UTF8 中转换为 byteArray,但我觉得这可以以更简单的方式完成。我在使用 JSON 中的数组的论坛上看到的示例似乎总是使用 JsonConvert.SerializeObject 但我不清楚是否应该使用它,如果我这样做了,我是否像之前所做的那样将序列化对象转换为 UTF8,是吗然后就可以在 HttpWebRequest 中使用了。 有人可以就我应该采取的方法提出建议吗?
【问题讨论】:
您编辑了您的问题,使ChildIds
不再是格式正确的 GUID 字符串。我将删除我的答案,因为你改变了你的问题。
我有不同的想法,但它与我之前提出的类似,即 GUID 格式(尽管作为字符串而不是 Guid 类型),所以将示例还原。
【参考方案1】:
创建一个类结构来匹配你的 json,
public class Data
public string GroupId get;set;
public List<string> ChildIds get;set;
使用 JsonConvert 或任何其他方法对数据进行序列化。
var json = JsonConvert.SerializeObject<Data>(str) ;
假设您已经将序列化数据注入到您的类中,则使用 httpclient 发布序列化数据。
var data = new StringContent(json, Encoding.UTF8, "application/json");
var post = await client.PostAsync(url, data);
【讨论】:
谢谢,但我正在尝试发送一个请求,所以如果我这样做了需要序列化。我需要转换为 UTF-8 吗?之前的序列化是否有问题。 想使用 byte[] byteArray = Encoding.UTF8.GetBytes(json);这样我就可以在那之后重用现有的代码。在 JsonConvert.SerializeObject 之后,此方法是否适用于 var json? @bravopers 如果GetBytes()
将序列化对象作为参数,它应该可以工作。如果没有,我不知道
@bravopers 是的,你可以这样做Encoding.UTF8.GetBytes(json)
但我建议你不要这样做,这种方法要好得多以上是关于带有包含数组的 Json 的 C# POST 请求的主要内容,如果未能解决你的问题,请参考以下文章
在 C# WebAPI 中,如何配置 CORS 以允许带有凭据和 json 内容的 POST 请求?
在 Laravel 中发送带有 json 对象数据的 post 请求
带有其他参数的 C# HttpClient Post 字符串数组