我在尝试反序列化从文件读取的json时遇到以下问题。我总是得到它不能按对象类型反序列化。有人发生过吗?
Mymodel.cs
public class MyModel
{
public List<toppings> Lista { get; set; }
}
public class toppings
{
public string description { get; set; }
}
Program.cs
static void Main(string[] args)
{
try
{
string json = File.ReadAllText(@"C:\Users\Ricciardo\Documents\Net Core Practice\Pizza\PizzaRead\pizzas.json").ToString();
MyModel objetos = JsonSerializer.Deserialize<MyModel>(json);
foreach (var ingrediente in objetos.Lista)
{
Console.WriteLine(ingrediente.description.ToString());
}
}
catch (Exception ex)
{
Console.Write(ex.Message.ToString());
throw ex;
}
Console.ReadKey();
}
JSON文件
[
{
"toppings": [
"pepperoni"
]
},
{
"toppings": [
"feta cheese"
]
},
{
"toppings": [
"pepperoni"
]
},
{
"toppings": [
"bacon"
]
}
]
[如果有人可以帮助我解决这个问题,我将非常感谢。干杯
看来您的类结构与JSON结构不匹配。
您的JSON的结构如下:
定义您的MyModel(或Pizza)类:
public class Pizza
{
public List<string> Toppings {get; set;}
}
然后更新您的Program.cs Main方法:
static void Main(string[] args)
{
try
{
string json = File.ReadAllText(@"C:\Users\Ricciardo\Documents\Net Core Practice\Pizza\PizzaRead\pizzas.json").ToString();
var objetos = JsonSerializer.Deserialize<List<Pizza>>(json);
foreach (var pizza in objetos)
{
//Console.WriteLine(ingrediente.description.ToString());
// TODO: Manipulate pizza objeto
}
}
catch (Exception ex)
{
Console.Write(ex.Message.ToString());
throw ex;
}
Console.ReadKey();
}
您可能需要稍微调整一下外壳。
另外,请注意JSON的结构方式会带来一些问题。
类似于此的结构可能会帮助您更多:
[
{
"Toppings": [
{
"name":"pepperoni"
"description":"blah"
},
]
},
]
然后您实际上可以像这样定义Topping类:
public class Topping
{
public string Name {get; set;}
public string Description {get; set;}
}
并更改Pizza类(MyModel):
public class Pizza
{
public List<Topping> Toppings {get; set;}
}