Я полностью новичок в программировании, я пытаюсь создать что-то вроде инструмента организации манги в формах 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);
}
}
}
, и у меня есть следующие классы, такие как:
public class Comic
{
private string Manga;
private int Chapters;
private bool isFinished;
private int LastReadCH;
public string Manga1 { get => Manga; set => Manga = value; }
public int Chapters1 { get => Chapters; set => Chapters = value; }
public bool IsFinished { get => isFinished; set => isFinished = value; }
public int LastReadCH1 { get => LastReadCH; set => LastReadCH = value; }
public Comic(Comic asd)
{
this.Manga = Manga1;
this.Chapters = Chapters1;
this.IsFinished = IsFinished;
this.LastReadCH = LastReadCH1;
}
public override string ToString()
{
return string.Format("{0}, {1}, {2}, {3}",
this.Manga, this.Chapters, this.IsFinished, this.LastReadCH);
}
}
и
public class ComicList
{
private List<Comic> comics;
public List<Comic> Comics { get => comics; set => comics = value; }
}
и
public class DisplayComic
{
static DisplayComic()
{
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);
FullList = comics.Comics;
}
}
}
}
private static List<Comic> fullList;
public static List<Comic> FullList { get => fullList; set => fullList = value; }
public static List<Comic> GetComcis()
{
return FullList;
}
}
код, вероятно, довольно запутанный, но опять же я совершенно новый и отслеживаю всю информацию в Интернете, также по какой-то причине открытый диалог windows открывается дважды, я не понимаю, почему. вот файл json, который я использую:
{
"Comics": [
{
"Manga": "MangaNumber1",
"Chapters": 85,
"isFinished": true,
"LastReadCH": 85
},
{
"Manga": "MangaNumber2",
"Chapters": 112,
"isFinished": true,
"LastReadCH": 112
},
{
"Manga": "MangaNumber3",
"Chapters": 117,
"isFinished": true,
"LastReadCH": 117
},
{
"Manga": "MangaNumber4",
"Chapters": 74,
"isFinished": true,
"LastReadCH": 74
}
]
}
Я пробовал почти все, кто мог бы, с моим «опытом», меняя все виды имен переменных и т. д., был бы очень признателен за помощь .
вот скриншот проблемы: поскольку вы можете видеть, что только логические значения на самом деле верны, в противном случае они будут ложными, хотя все остальные значения ...
РЕДАКТИРОВАТЬ: результат, который я ищу, состоит в том, чтобы заполнить список именами манги (спасибо @beeker за это свойство), и как только я выбрал указанную мангу, я хочу создать некоторые другие объекты, такие как метки и текстовые поля, чтобы просматривать и редактировать значения глав et c, также я хотел бы иметь возможность видеть, что анализируется файлом json, когда я делаю это:
label1.Text = Convert.ToString(comics);
я получаю метка с текстом "Manga_Organizer_2.ComicList"
Кстати, когда я говорю, что я новичок, я имею в виду, что я когда-либо делал вещи только с консольными приложениями, используя только функции "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";
также полностью удаляет инкапсуляции в классе comi c, в конце это выглядит так:
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; }
}
, а также Класс displaycomi c выглядит следующим образом:
public class DisplayComic
{
public static List<Comic> FullList { get; set; }
public static List<Comic> GetComcis()
{
return FullList;
}
}
Кроме того, после того, как эта проблема возникла еще больше, я мог десериализовать json, проанализировать его в строку, а затем в список, загрузить, сохранить и редактировать его, и мне также удалось сериализовать его обратно вместе и с помощью savefiledialog создать файл для него, однако, когда я это сделаю, я не смог бы повторно десериализовать его еще раз, что-то в json изменилось (с объект к массиву или наоборот), кроме того, у меня также были проблемы с датой и временем, я не мог правильно загрузить его из строки и т. д., в любом случае, после множества неудач и почти 17 часов просмотра кода с озадаченным лицом я закончил свое приложение: D! Он делает все, что я хочу, загрузить json, сохранить и отредактировать его, собрать обратно, добавить и удалить из него, и я многому научился от всех этих проблем, спасибо всем за помощь, спасибо вам, ребята узнал, как настроить элементы для отображения в списках, а также, что очень важно, «немного» научился отлаживать код. Спасибо.