我從外部服務得到了這個奇怪的 API 回應:
{
"Columns": {
"1": {
"Fuels": [
"1",
"10",
"4",
"4"
]
},
...
"6": {
"Fuels": [
"1",
"4",
"10"
]
}
}
}
默認情況下,所有轉換器(json -> 到 csharp 模型)都執行如下模型:
public class _1
{
public List<string> Fuels { get; set; }
}
public class _2
{
public List<string> Fuels { get; set; }
}
public class _3
{
public List<string> Fuels { get; set; }
}
public class _4
{
public List<string> Fuels { get; set; }
}
public class Columns
{
public _1 _1 { get; set; }
public _2 _2 { get; set; }
public _3 _3 { get; set; }
public _4 _4 { get; set; }
}
但我想要這樣的東西:
public class Column
{
public string Number { get; set; }
public List<string> Fuels { get; set; }
}
我認為這是Json序列化的一個側面開發人員錯誤,因為Columns應該是一個Array,但它是一個物件:(
我需要以某種方式將其轉換為陣列,也許它是一些Newtonsoft或默認的 .NET Json 轉換器attributes,或者在不撰寫自定義反序列化器的情況下做到這一點?
我正在使用.NET 6。
uj5u.com熱心網友回復:
Json.Net 可以將任何物件反序列化為Dictionary<string, object>.
在您的情況下,您可以專門化鍵和值的型別:
- 整數
- 柱子
其中Column定義為
public class Column
{
public List<string> Fuels {get; set;}
}
因此,如果您Columns在根類中定義您的屬性,Dictionary<int, Column>那么它將與默認的 json 轉換器一起正常作業
public class Root
{
public Dictionary<int, Column> Columns;
}
命令式用法:
var result = JsonConvert.DeserializeObject<Root>(json).Columns;
uj5u.com熱心網友回復:
嘗試這個
List<Column> columns = ((JObject)JObject.Parse(json)["Columns"]).Properties()
.Select(v => new Column(v.Name, v.Value["Fuels"].ToObject<List<string>>()))
.ToList();
班級
public class Column
{
public string Number { get; set; }
private List<string> Fuels { get; set; }
public Column(string number, List<string> fuels)
{
Number = number;
Fuels = fuels;
}
public Column(){}
}
uj5u.com熱心網友回復:
// Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(myJsonResponse);
public class _1
{
public List<string> Fuels { get; set; }
}
public class _6
{
public List<string> Fuels { get; set; }
}
public class Columns
{
public _1 _1 { get; set; }
public _6 _6 { get; set; }
}
public class Root
{
public Columns Columns { get; set; }
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/493632.html
