C# 需要帮助用json填充列表框,当前显示空值吗

C# 需要帮助用json填充列表框,当前显示空值吗,c#,json,windows-forms-designer,C#,Json,Windows Forms Designer,我对编程一无所知, 我试图在windows窗体中创建一个类似于漫画的组织工具,但我一直在用反序列化json字符串中的数据填充列表框,它当前只正确显示布尔值,所有其他值都是0甚至字符串。 我有一个按钮来执行此操作: using (OpenFileDialog openFileDialog = new OpenFileDialog() { Filter = "Json Files|*.json", ValidateNames = true, Multiselect = false }) {

我对编程一无所知, 我试图在windows窗体中创建一个类似于漫画的组织工具,但我一直在用反序列化json字符串中的数据填充列表框,它当前只正确显示布尔值,所有其他值都是0甚至字符串。 我有一个按钮来执行此操作:

using (OpenFileDialog openFileDialog = new OpenFileDialog() { Filter = "Json Files|*.json", ValidateNames = true, Multiselect = false })
{
    if (openFileDialog.ShowDialog() == DialogResult.OK)
    {
        var fileStream = openFileDialog.OpenFile();
        using (StreamReader sr = new StreamReader(fileStream))
        {
            string fileContent = sr.ReadToEnd();
            ComicList comics = JsonConvert.DeserializeObject<ComicList>(fileContent);
            Manga_listBox.DataSource = DisplayComic.FullList;


            //ignore this little bit it's just so i can see what's happening
            label1.Text = Convert.ToString(comics.Comics.Count);
            label1.Text = Convert.ToString(DisplayComic.FullList);
        }
    }
}

我已经试过了,任何有我专业知识的人都可以,更改所有类型的变量名等等,非常感谢您的帮助

以下是问题的屏幕截图:

编辑: 我跳转的结果是用漫画名称填充列表框,感谢@beeker的属性,一旦我选择了所说的漫画,我想创建一些其他对象,如标签和文本框,以查看和编辑章节的值等,此外,我希望在执行此操作时能够看到json文件解析的内容:

                        label1.Text = Convert.ToString(comics);
我得到的标签上有漫画组织者2.ComicList的文字

顺便说一句,当我说im new时,我的意思是我只在控制台应用程序中使用过only if函数,整个解析json、openfiledialog甚至类的用法都是全新的。我也没有使用任何其他语言编程的背景c是第一语言,我喜欢它,尽管有着可怕的困难:

答复/更新: 现在一切都好了: 我所要做的就是做好准备

                        DisplayComic.FullList = comics.Comics;
在为列表框设置数据源之前的openfiledialog中。 最后看起来是这样的:


                        string fileContent = sr.ReadToEnd();
                        ComicList comics = JsonConvert.DeserializeObject<ComicList>(fileContent);
                        DisplayComic.FullList = comics.Comics;
                        Manga_listBox.DataSource = DisplayComic.FullList;
                        Manga_listBox.DisplayMember = "manga";
    public class Comic
    {
        public string Manga { get; set; }
        public double Chapters { get; set; }
        public bool IsFinished { get; set; }
        public double LastReadCH { get; set; }
        public string StartedOn { get; set; }
        public string FinishedOn { get; set; }

    }
    public class DisplayComic
    {
        public static List<Comic> FullList { get; set; }


        public static List<Comic> GetComcis()
        {
            return FullList;
        }
    }
displaycomic类也是这样的:


                        string fileContent = sr.ReadToEnd();
                        ComicList comics = JsonConvert.DeserializeObject<ComicList>(fileContent);
                        DisplayComic.FullList = comics.Comics;
                        Manga_listBox.DataSource = DisplayComic.FullList;
                        Manga_listBox.DisplayMember = "manga";
    public class Comic
    {
        public string Manga { get; set; }
        public double Chapters { get; set; }
        public bool IsFinished { get; set; }
        public double LastReadCH { get; set; }
        public string StartedOn { get; set; }
        public string FinishedOn { get; set; }

    }
    public class DisplayComic
    {
        public static List<Comic> FullList { get; set; }


        public static List<Comic> GetComcis()
        {
            return FullList;
        }
    }
此外,在所有这些麻烦发生之后,我可以反序列化json,将其解析为字符串,然后解析为列表,加载、保存和编辑它,我还设法将其重新序列化在一起,并使用savefiledialog为其创建一个文件,但当我这样做时,我将无法再次对其进行反序列化,关于json的一些东西已经从一个对象变成了一个数组,反之亦然,除了我在datetime方面也有问题,无法从字符串中正确加载等等,不管怎样,在经历了一系列的不幸之后,我终于完成了我的应用程序:D! 它做了我想要的一切,加载一个json,保存和编辑它,把它放回一起,添加和删除它,我从所有这些麻烦中学到了很多东西,感谢你们的帮助,感谢你们学会了如何设置在列表框上显示的内容,而且非常重要的是,我学会了如何调试代码。
谢谢。

尝试设置listbox DisplayMember属性,以便控件知道要查看的类的哪个属性。像这样的

Manga_listBox.DataSource = DisplayComic.FullList;
Manga_listBox.DisplayMember = "Manga";
参考: 回答: 我删除了display comic类中的整个openfiledialog,重命名了comic类中的封装并完成了:D,现在openfiledialog只打开一次,json中的值被正确解析到comics列表中,从而使我能够按照自己的意愿使用它们,谢谢,你把我推向了正确的方向,让我有了学习调试东西的想法:D。
现在剩下的就是学习如何通过从列表框中选择不同的行来创建对象,另一个挑战等待着这位新来者。

…我对编程完全陌生。。。因此,需要学习的一项重要技能是,您的代码能够一步一步地找出发生了什么以及哪里出了问题。例如,您可以检查实际反序列化的内容。您的Comic实例已填充了哪些值等。您的Comic类构造函数看起来错误-您没有从传入的asd参数填充属性。嗨!欢迎我同意@RenéVogt的观点,在学习如何处理的过程中,学习如何调试将是您的首要任务之一。同时,可能会用一些预期输出和当前输出来扩展您的帖子。还要问自己以下问题:解析JSON后,我的模型是什么样子的,这些值是我所期望的还是有什么问题。这应该将问题从整个应用程序缩小到显示部分或数据部分。继续这样做,直到找到根为止cause@auburg这是最近才添加的,我甚至没有使用它,在这里有点绝望,并认为这会有所帮助,代码输出相同的结果,即使没有完整的代码片段。@RenéVogt不试图重复,但再次,完全是新的,我正在使用visual studio 2017我看到上面的“调试”下拉列表,但我不知道如何使用它,顺便说一句,很抱歉我的英语不好,这不是我的母语。设置该属性没有任何作用。但是,当我将其设为Manga1时,结果是一个完全空的列表框,我相信这是可以的,因为漫画属性返回了一个空字符串,这是很好的,只显示名称,一旦我得到一切工作,感谢它的解决!你能用代码提供解决方案吗?这将极大地帮助像你这样遇到类似问题的其他新人。别忘了给我打电话
停止学习;当然,现在将包括在后。
Manga_listBox.DataSource = DisplayComic.FullList;
Manga_listBox.DisplayMember = "Manga";