带有包含数组的 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 请求?

发送带有包含列表的 json 数据的 post 请求

在 Laravel 中发送带有 json 对象数据的 post 请求

带有其他参数的 C# HttpClient Post 字符串数组

求一个c#的 post请求 json 并且接收返回json数据的一个demo。

如何使用 C# 在 POST 请求中发送 json 数据 [重复]