【问题标题】:C# Http Request with array in jsonC# Http 请求与 json 中的数组
【发布时间】:2021-08-14 23:52:02
【问题描述】:

我刚刚接触过 C# 中的 REST API。这一定是一个非常基本的问题。所以我正在做一个 http POST 请求,它需要在正文中使用以下 json 格式:

{
"cars": [
   {
    "carsRego": "ABC123"
   }
 ]
}

如何序列化它?我想出了这个,但它给了我错误 422:无法处理的实体错误。

var cars = new[]
                {
                    new
                    {
                        carsRego = "ABC123"
                    }
                };
        

        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            string json = new JavaScriptSerializer().Serialize(new
            {
                cars
            }); 

            streamWriter.Write(json);
        }

谢谢!

【问题讨论】:

  • 帖子中显示的代码与产生上述错误极为不同。请查看minimal reproducible example 发布代码指南和edit 相应问题。旁注:大多数人使用 Newtonsoft.Json - 虽然这里绝对不是问题,但考虑切换,因为它会给你更多的样本/找到​​答案的机会。
  • 如果这是您要从中返回 json 的 API 端点,请使用 return JsonResult(myActualData);
  • 使用 System.Text.Json。示例:string jsonString = JsonSerializer.Serialize(cars); 必须通过 nuget 安装
  • 旁注:您应该使用 System.Text.Json 或 Newtonsoft.Json 而不是 JavaScriptSerializer,每 Microsoft recommendations
  • @AugustoFerbonink 取决于目标框架,不需要通过 nuget 安装,它是原生的。

标签: c# api rest web


【解决方案1】:

如果你在使用 .NET 5.0/6.0 .NET 核心 3.0 或 3.1

使用System.Text.Json

例子:

string jsonString = JsonSerializer.Serialize(cars);

如果你在使用 .NET Standard 2.0 或更高版本 .NET Framework 4.7.2 或更高版本 .NET Core 2.0、2.1 和 2.2

你必须通过 nuget 安装 System.Text.Json

如果您使用 .net framework 4.7.2 或更早版本,请使用 newtonsoft.json:https://www.newtonsoft.com/,或通过 nuget 安装。

例子:

  using Newtonsoft.Json;
  ...
  var cars = new[]
            {
                new
                {
                    carsRego = "ABC123"
                }
            };

   string output = JsonConvert.SerializeObject(cars);

【讨论】:

  • 不客气。请将此答案标记为正确答案。
【解决方案2】:

试试这个:

创建类

public class CarsRegistration
{
    public string carsRego {get; set;}
}

现在您可以使用此代码

var cars = new Dictionary<string, CarsRegistration[]>
            {
             { "cars",  new CarsRegistration[]
                {
                    new CarsRegistration{ carsRego = "ABC123"}
                }
                }
            };

string output = JsonConvert.SerializeObject(cars);

var carsFromJson= JsonConvert.DeserializeObject<Dictionary<string, 
     CarsRegistration[]>> (output);

output = JsonConvert.SerializeObject(carsFromJson);

输出

{"cars":[{"carsRego":"ABC123"}]}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 2016-10-25
    相关资源
    最近更新 更多