Как десерализовать объект json в запросе linq?
Я извлекаю данные json из txt файла в linq и выполняю некоторые действия, чтобы ускорить процесс. но когда я пытаюсь вызвать этот запрос, он показывает ошибку для десериализации объекта json. Так как его десериализовать?
Я получаю ошибку как
Невозможно десериализовать текущий объект JSON (например, {"name":"value"}) в тип 'System.Collections.Generic.List1[MMF.LiveAMData]', поскольку для типа требуется массив JSON (например, [1,2,3]) правильно десериализовать.
Я ищу, чтобы решить эту проблему, но почти все ответы выполняют десериализацию без linq. Мне нужно использовать linq из-за задержки времени.
Ниже мой метод, который я называю
public static void something()
{
File.ReadLines(filePath)
.AsParallel()
.Select(x => x.TrimStart('[').TrimEnd(']'))
.Select(JsonConvert.DeserializeObject<List<LiveAMData>>)
.ForAll(WriteRecord);
}
и ниже мой объект класса, который я использую
public class LiveAMData
{
public string ev { get; set; }
public string sym { get; set; }
}
2 ответа
Вы пытаетесь десериализовать массив JSON, но вы обрезаете [
а также ]
части, так что это больше не массив JSON. Удалить линию обрезки:
public static void something()
{
File.ReadLines(filePath)
.AsParallel()
.Select(JsonConvert.DeserializeObject<List<LiveAMData>>)
.ForAll(WriteRecord);
}
Если каждая строка вашего файла представляет собой массив JSON, например:
[{"ev":"Test1", "sym": "test"},{"ev":"Test2", "sym": "test"}]
Ваша линия обрезки изменит это на этот недопустимый JSON:
{"ev":"Test1", "sym": "test"},{"ev":"Test2", "sym": "test"}
Который, безусловно, не может быть десериализован в List<LiveAMData>>
Поскольку вы десериализуете каждый объект индивидуально, вам не нужно List
введите в DeserializeObject
вызов. Попробуй это:
public static void something()
{
File.ReadLines(filePath)
.AsParallel()
.Select(x => x.TrimStart('[').TrimEnd(']'))
.Select(JsonConvert.DeserializeObject<LiveAMData>)
.ForAll(WriteRecord);
}