【问题标题】:Serialize JSON to JSON Array (Nested JSON) for POST Request C#将 JSON 序列化为 JSON 数组(嵌套 JSON)以用于 POST 请求 C#
【发布时间】:2021-02-07 13:36:54
【问题描述】:

这就是我想要实现的目标。我正在尝试将我的模型序列化为 JSON 以便发布请求以插入记录

{
    "Data": [
        {
            "employee_num": "7812345",
            "code": "333",
            "startdate": "2020-10-03"
        },
        {
            "employee_num": "2345789",
            "code": "444",
            "startdate": "2020-10-03"
        }
    ]
}

我被困住了

{
     "employee_num": "7812345",
     "code": "333",
     "startdate": "2020-10-03"
},
{
     "employee_num": "2345789",
     "code": "444",
     "startdate": "2020-10-03"
}

这是我的代码

var options = new JsonSerializerOptions
{
WriteIndented = false
};
var jsonString = JsonSerializer.Serialize(Model, options);

这里是新手

【问题讨论】:

  • 你能发布模型的模型/类吗?
  • 您遇到的问题 不是有效的 JSON。您有两个不在集合中的对象。尝试序列化new {Data = model}
  • 欢迎来到 SO Ken! 2 个问题:Data 元素/级别是否必要?您是否有权访问您正在 POSTing 的 api 使用的类?
  • @ShaiCohen 数据元素是必要的,因为我正在使用中间件来处理/处理 API。没有其他方法可以为中间件提交 1 个发布请求以捕获数据数量。
  • @Jawad 是这样的class Model { public string employee_num { get; set; } public string code { get; set; } public string startdate{ get; set; } } 然后我用List添加数据public List<Model> model= new List<Model>(); Model.Add(new Model { employee_num = "1", code = "1", startdate = "1" }

标签: c# asp.net json serialization


【解决方案1】:

我使用了 newtonsoft 的 Json Conerter,得到了你想要的格式。

Test t = new Test("Max", "Musterallee", "Mustermann@Muster.de");
Test t1 = new Test("Max2", "Musterallee2", "Mustermann2@Muster.de");

Test2 t2 = new Test2();
t2.addUser(t);
t2.addUser(t1);
var output = JsonConvert.SerializeObject(t2);
Console.WriteLine(output);

测试:

class Test
{
    public string name { get; set; }
    public string adress { get; set; }
    public string email { get; set; }
    public Test(string name, string adress, string email)
    {
        this.name = name;
        this.adress = adress;
        this.email = email;
    }
}

测试2:

class Test2
{
    public List<Test> Data;
    public Test2()
    {
        Data = new List<Test>();
    }

    public void addUser (Test t1)
    {
        Data.Add(t1);
    }
}

输出看起来像这样:

{
  "Data": [
    {
      "name": "Max",
      "adress": "Musterallee",
      "email": "Mustermann@Muster.de"
    },
    {
      "name": "Max2",
      "adress": "Musterallee2",
      "email": "Mustermann2@Muster.de"
    }
  ]
}

【讨论】:

  • 感谢您的解决方案。有没有办法在不创建模型的新实例的情况下加载多个数据?我使用了这种添加数据的方式: public List model= new List();然后在列表中添加新数据
  • 像这个模型一样添加数据。Add(new Model { employee_num = "7812345", code = "444", startdate = "2020-01-01" });
【解决方案2】:

嗯,从技术上讲,您的 json 建议您应该有这样的模型:

public partial class SomeClass // You can choose some better class names.
{
    [JsonProperty("Data")]
    public List<Datum> Data { get; set; }
    public SomeClass()
    {
        Data = new List<Datum>();
    }

}

public partial class Datum
{
    [JsonProperty("employee_num")]
    public string EmployeeNum { get; set; }

    [JsonProperty("code")]
    public string Code { get; set; }

    [JsonProperty("startdate")]
    public string Startdate { get; set; }
}

这就是它的填充方式:

var someClassObj = new SomeClass();

var datum = new Datum
{
    EmployeeNum = "123",
    Code = "321",
    StartDate = "2003-03-03"
};
someClassObj.Data.Add(datum);
// You can add more objects in it as per your need.

然后将其序列化为json,您应该这样做:

var json = JsonConvert.Serialize(someClassObj);

输出将是这样的:

{
    "Data": [
        {
            "employee_num": "123",
            "code": "321",
            "startdate": "2003-03-03"
        }
    ]
}

【讨论】:

  • 每次添加新数据时是否需要有不同的模型实例?顺便感谢您的解决方案。我真的很感激。
  • 我现在明白了,伙计们。我没有为新记录创建新实例,而是重用现有的,然后更改值并再次添加到 List 对象。谢谢你的时间。真的很感激。
猜你喜欢
  • 2017-09-21
  • 2015-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多