Json反序列化错误,问题C#.Net Core

问题描述 投票:0回答:1

我在尝试反序列化从文件读取的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"
    ]
  }
]

[如果有人可以帮助我解决这个问题,我将非常感谢。干杯

c# .net json serialization core
1个回答
1
投票

看来您的类结构与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;}
}
© www.soinside.com 2019 - 2024. All rights reserved.