【问题标题】:C# POST request with Json containing an array带有包含数组的 Json 的 C# POST 请求
【发布时间】: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 类型),所以将示例还原。

标签: c# json post


【解决方案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) 但我建议你不要这样做,这种方法要好得多
猜你喜欢
  • 2018-08-22
  • 2014-06-16
  • 2018-03-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2016-04-24
  • 2022-06-11
相关资源
最近更新 更多