我正在linq中从txt文件中获取json数据,并对此执行一些操作以加快处理速度。但是当我尝试调用该查询时,它向我显示了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; }
}
答案 0 :(得分:3)
您正在尝试反序列化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>>
答案 1 :(得分:0)
在逐个反序列化每个对象时,不需要在List
类型中输入
DeserializeObject
个电话。试试这个:
public static void something()
{
File.ReadLines(filePath)
.AsParallel()
.Select(x => x.TrimStart('[').TrimEnd(']'))
.Select(JsonConvert.DeserializeObject<LiveAMData>)
.ForAll(WriteRecord);
}