c# system.text.json 将 "different" 对象反序列化为一个 class 的数组
c# system.text.json deserialize "different" object to an array of one class
我有一个 json 有这样的对象
"SeasonalInfoBySeasonID": {
"aa8e0d2d-d29d-4c03-84f0-b0bda96a9fe1": {
"ID": "aa8e0d2d-d29d-4c03-84f0-b0bda96a9fe1",
"A": "1",
"B": 5,
},
"6f95fb92-5eb2-4fe4-ae01-dc54d810c8a5": {
"ID": "6f95fb92-5eb2-4fe4-ae01-dc54d810c8a5",
"A": "1",
"B": 5,
}, .....
}
SeasonalInfoBySeasonID 的对象显然都是相同的数据结构,但不幸的是,它们甚至没有列在数组中,我没有在 seasoninfobyseasonid 模型中一一列出它们,而是这样做的:
public class SeasonalInfoBySeasonID
{
private IDictionary<string, object> _additionalProperties = new Dictionary<string, object>();
[JsonExtensionData]
public IDictionary<string, object> AdditionalProperties
{
get { return _additionalProperties; }
set { _additionalProperties = value; }
}
}
效果很好,但我想知道是否可以将具有多个“相同类型”对象的对象直接反序列化为数组?
您根本不需要 class。
您可以像这样在根对象上声明 属性
public Dictionary <string, YourType> SeasonalInfoBySeasonID {get;set;} = new Dictionary <string, YourType>();
那么每个键都是aa8e0d2d-d29d-4c03-84f0-b0bda96a9fe1
等,对象就是内部类型
您可以将数据转换为列表
using Newtonsoft.Json;
var jsonObject = JObject.Parse(json);
List<Item> list = ((JObject)jsonObject["SeasonalInfoBySeasonID"]).Properties()
.Select(p => p.Value.ToObject<Item>()).ToList();
public class Item
{
public string ID { get; set; }
public string A { get; set; }
public int B { get; set; }
}
结果
[
{
"ID": "aa8e0d2d-d29d-4c03-84f0-b0bda96a9fe1",
"A": "1",
"B": 5
},
{
"ID": "6f95fb92-5eb2-4fe4-ae01-dc54d810c8a5",
"A": "1",
"B": 5
}
]
或者你可以使用字典
Dictionary<string,Item> SeasonalInfoBySeasonID =
Object.Parse(json)["SeasonalInfoBySeasonID"]
.ToObject<Dictionary<string, Item>>();
我有一个 json 有这样的对象
"SeasonalInfoBySeasonID": {
"aa8e0d2d-d29d-4c03-84f0-b0bda96a9fe1": {
"ID": "aa8e0d2d-d29d-4c03-84f0-b0bda96a9fe1",
"A": "1",
"B": 5,
},
"6f95fb92-5eb2-4fe4-ae01-dc54d810c8a5": {
"ID": "6f95fb92-5eb2-4fe4-ae01-dc54d810c8a5",
"A": "1",
"B": 5,
}, .....
}
SeasonalInfoBySeasonID 的对象显然都是相同的数据结构,但不幸的是,它们甚至没有列在数组中,我没有在 seasoninfobyseasonid 模型中一一列出它们,而是这样做的:
public class SeasonalInfoBySeasonID
{
private IDictionary<string, object> _additionalProperties = new Dictionary<string, object>();
[JsonExtensionData]
public IDictionary<string, object> AdditionalProperties
{
get { return _additionalProperties; }
set { _additionalProperties = value; }
}
}
效果很好,但我想知道是否可以将具有多个“相同类型”对象的对象直接反序列化为数组?
您根本不需要 class。
您可以像这样在根对象上声明 属性
public Dictionary <string, YourType> SeasonalInfoBySeasonID {get;set;} = new Dictionary <string, YourType>();
那么每个键都是aa8e0d2d-d29d-4c03-84f0-b0bda96a9fe1
等,对象就是内部类型
您可以将数据转换为列表
using Newtonsoft.Json;
var jsonObject = JObject.Parse(json);
List<Item> list = ((JObject)jsonObject["SeasonalInfoBySeasonID"]).Properties()
.Select(p => p.Value.ToObject<Item>()).ToList();
public class Item
{
public string ID { get; set; }
public string A { get; set; }
public int B { get; set; }
}
结果
[
{
"ID": "aa8e0d2d-d29d-4c03-84f0-b0bda96a9fe1",
"A": "1",
"B": 5
},
{
"ID": "6f95fb92-5eb2-4fe4-ae01-dc54d810c8a5",
"A": "1",
"B": 5
}
]
或者你可以使用字典
Dictionary<string,Item> SeasonalInfoBySeasonID =
Object.Parse(json)["SeasonalInfoBySeasonID"]
.ToObject<Dictionary<string, Item>>();