Как преобразовать файл json в список <MyClass> - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь создать файл журнала в формате json из списка. Мой класс для списка

public class ChunkItem
    {
        public int start { get; set; }
        public int end { get; set; }
    }
 public class DownloadItem
    {
        public int id { get; set; }
        public string fname { get; set; }
        public string downloadPath { get; set; }
        public int chunkCount { get; set; }
        public ChunkItem[] chunks { get; set; }
        public DownloadItem(int _id, string _fname, string _downloadPath, int _chunkCount, ChunkItem[] _chunks)
        {
            id = _id;
            fname = _fname;
            downloadPath = _downloadPath;
            chunkCount = _chunkCount;
            chunks = _chunks;
        }

    }

Создание файла json из этого класса работает нормально

ChunkItem[] chunks = new ChunkItem[2];
chunks[0] = new ChunkItem();
chunks[0].start = 0;
chunks[0].end = 0;
chunks[1] = new ChunkItem();
chunks[1].start = 0;
chunks[1].end = 0;
List<DownloadItem> lst = new List<DownloadItem>();
lst.Add(new DownloadItem(0, "", "", 2, chunks));
lst.Add(new DownloadItem(1, "aaa", "sss", 2, chunks));
lst.Add(new DownloadItem(2, "bbb", "ddd", 2, chunks));
string json = JsonConvert.SerializeObject(lst);
System.IO.File.WriteAllText(logPath, json);

Я хочу прочитать файл в том же списке классов и сделать некоторые обновления или добавить новые строки Я могу прочитать файл в строку, но не могу создать новый список, как я могу преобразовать строку (чтение json файл) в List<DownloadItem> new list

Ответы [ 3 ]

1 голос
/ 07 февраля 2020

Вам нужно прочитать все контенты из файла и десериализовать строку json до List<DownloadItem>

var jsonData = File.ReadAllText(filePath)
var list = JsonConvert.DeserializeObject<List<DownloadItem>>(jsonData);
0 голосов
/ 07 февраля 2020

В Clas DownloadItem отсутствует конструктор по умолчанию без параметров.

0 голосов
/ 07 февраля 2020

Я использую Newtonsoft, где создание экземпляров и их заполнение просты

var result = Newtonsoft.Json.JsonConvert.DeserializeObject<MyClass>(jsonString);
...