首页 > 解决方案 > 导入后错误操作 C# JSON 数据

问题描述

你好(我是菜鸟,所以如果我使用了错误的术语,请纠正我),

我尝试使用 StreamReader 导入的 JSON 文件有问题,如下所示:

    public List<Category> Items;

        try
        {
            using (var r =
                new StreamReader(
                    FilePath1)
            )
            {
                var json = r.ReadToEnd();
                Items = JsonConvert.DeserializeObject<List<Category>>(json);
            }
        }
        catch (Exception e)
        {
            MessageBox.Show(Convert.ToString(e), "Error");
            Environment.Exit(1);
        }

这个确切的代码以前对我有用,并且列表应该包含以下数据:

[
  {
    "name": "Elektronik",
    "subcategories": [
      {
        "name": "Elektrotechnische Physik",
        "questions": [
          {
            **"question": "Wie ändert sich die Anzahl der freien Elektronen vor und nach dem Schließen eines Stromkreises innerhalb eines Leiters?"**,
            "answer": "Die Anzahl bleibt gleich.",
            "answers": [
              "Die Anzahl verringert sich.",
              "Die Anzahl bleibt gleich.",
              "Die Anzahl erhöht sich.",
              "Es gibt keine freien Elektronen in einem Leiter."
            ]
          }, .....

粗体部分是有问题的部分,因为该列表实际上包含以下数据:

[
  {
    "name": "Elektronik",
    "subcategories": [
      {
        "name": "Elektrotechnische Physik",
        "questions": [
          {
            **"SubQuestion": null**,
            "answer": "Die Anzahl bleibt gleich.",
            "answers": [
              "Die Anzahl verringert sich.",
              "Die Anzahl bleibt gleich.",
              "Die Anzahl erhöht sich.",
              "Es gibt keine freien Elektronen in einem Leiter."
            ]
          },

它删除所有问题并将其替换为“SubQuestion = null”。有谁知道为什么或知道如何帮助我?

谢谢!

标签: c#json

解决方案


看起来您的 json 中的属性名称与模型中的属性名称不匹配。您的模型可能如下所示......除了 Question,它似乎有一个名为“SubQuestion”而不是“question”的属性。如果这是您的意图,正如 Colin 所提到的,您可以在其上放置一个 json 属性,以便可以将 json 映射到正确的属性。

public class Category
{
    public string name { get; set; }
    public Subcategory[] subcategories { get; set; }
}

public class Subcategory
{
    public string name { get; set; }
    public Question[] questions { get; set; }
}

public class Question
{
    public string question { get; set; }
    public string answer { get; set; }
    public string[] answers { get; set; }
}

推荐阅读