我有JSON
{
"07-2022": [],
"08-2022": [
{
"event_title": "asdf",
"positions": [
{
"position_title": "Graphics Op"
},
{
"position_title": "Graphic Design"
}
]
}
],
"06-2023": []
}
它是一个"月"键,它的值是一个对象数组,我称之为Job。每个job都有一个position对象数组。
所以我可以很容易地创建这两个模型
public class Job {
public string event_title {get;set;}
public List<Position> positions {get; set;}
}
public class Position {
public string position_title {get; set;}
}
如何将日期字符串转换为包含工作列表的月类?
public class EventMonth {
public string month {get; set;}
public List<Job> jobs {get; set;}
}
不是答案,特别是当您可能无法控制这一点时。但如果你这样做,这是一个提示JSON结构不良的注释(修复它可以使你的映射更容易!)
你有这个:
{
"07-2022": [],
"08-2022": [
{
...
这是一个以月键命名属性的对象。然后,每个属性项包含一个对象数组。
构造这个JSON的更好的方法是作为字典,更像这样:
[
{
"monthKey":"2022-07-01",
"events":[]
},
{
"monthKey":"2022-08-01",
"events":[
{
...
也就是说,我们从数组开始,因为数组才是条目。数组中的每一项都是一个具有属性monthKey
的对象,它告诉我们有关这些项的信息。该键的构建方式将使创建表示每月第一个日期的完整date对象变得更容易。数组对象也有一个"事件"。数组。
通过这种方式,我们可以更准确地传达关于事件的元数据,并且我们这样做可以更容易地为不允许仅使用数字属性名称的语言建模。
作为额外的注意事项,在示例中没有任何地方在一个月内有超过一个事件。这可能是样本数据附带的,但如果不是,我们也应该考虑将events
属性更改为对象,而不是数组。
因为你的json不是List<EventMonth>
的类型,而是Dictionary<string, List<Job>>
,你需要实现模型转换:
…
using Newtonsoft.Json;
…
public class Job
{
[JsonProperty("event_title")]
public string EventTitle {get;set;}
[JsonProperty("positions")]
public List<Position> Positions { get; set; }
}
public class Position
{
[JsonProperty("position_title")]
public string PositionTitle { get; set; }
}
public class EventMonth
{
[JsonProperty("month")]
public string Month { get; set; }
[JsonProperty("jobs")]
public List<Job> Jobs { get; set; }
}
…
var subResult = JsonConvert.DeserializeObject<Dictionary<string, List<Job>>>(jsonFromQuestion);
var result = subResult.Select(s => new EventMonth
{
Month = s.Key,
Jobs = s.Value
}).ToList();
编辑:相同的代码,但使用System.Text.Json
…
using System.Text.Json;
using System.Text.Json.Serialization;
…
public class Job
{
[JsonPropertyName("event_title")]
public string EventTitle {get;set;}
[JsonPropertyName("positions")]
public List<Position> Positions { get; set; }
}
public class Position
{
[JsonPropertyName("position_title")]
public string PositionTitle { get; set; }
}
public class EventMonth
{
[JsonPropertyName("month")]
public string Month { get; set; }
[JsonPropertyName("jobs")]
public List<Job> Jobs { get; set; }
}
…
var subResult = JsonSerializer.Deserialize<Dictionary<string, List<Job>>>(jsonFromQuestion);
var result = subResult.Select(s => new EventMonth
{
Month = s.Key,
Jobs = s.Value
}).ToList();