如何在 linq 查询中反序列化 json 对象?
How to deseralize json object in linq query?
我正在从 linq 中的 txt 文件中获取 json 数据,并对其执行一些操作以加快处理速度。但是当我尝试调用该查询时,它向我显示 json 对象的反序列化错误。那么如何反序列化呢?
我收到 错误 就像
Cannot deserialize the current JSON object (e.g. {"name":"value"})
into type 'System.Collections.Generic.List1[MMF.LiveAMData]' because
the type requires a JSON array (e.g. [1,2,3]) to deserialize
correctly.
我搜索解决这个问题,但几乎所有答案都在不使用 linq 的情况下执行反序列化。由于时间延迟,我需要使用 linq。
下面是我调用的方法
public static void something()
{
File.ReadLines(filePath)
.AsParallel()
.Select(x => x.TrimStart('[').TrimEnd(']'))
.Select(JsonConvert.DeserializeObject<List<LiveAMData>>)
.ForAll(WriteRecord);
}
以下是我正在使用的 class 对象
public class LiveAMData
{
public string ev { get; set; }
public string sym { get; set; }
}
您正在尝试反序列化一个 JSON 数组,但是您 trim 正在 [
和 ]
部分以便它不再是 JSON数组。删除 trim 行:
public static void something()
{
File.ReadLines(filePath)
.AsParallel()
.Select(JsonConvert.DeserializeObject<List<LiveAMData>>)
.ForAll(WriteRecord);
}
如果文件的每一行都是一个 JSON 数组,如下所示:
[{"ev":"Test1", "sym": "test"},{"ev":"Test2", "sym": "test"}]
您的 trim 行会将其更改为无效 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);
}
我正在从 linq 中的 txt 文件中获取 json 数据,并对其执行一些操作以加快处理速度。但是当我尝试调用该查询时,它向我显示 json 对象的反序列化错误。那么如何反序列化呢?
我收到 错误 就像
Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List1[MMF.LiveAMData]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
我搜索解决这个问题,但几乎所有答案都在不使用 linq 的情况下执行反序列化。由于时间延迟,我需要使用 linq。
下面是我调用的方法
public static void something()
{
File.ReadLines(filePath)
.AsParallel()
.Select(x => x.TrimStart('[').TrimEnd(']'))
.Select(JsonConvert.DeserializeObject<List<LiveAMData>>)
.ForAll(WriteRecord);
}
以下是我正在使用的 class 对象
public class LiveAMData
{
public string ev { get; set; }
public string sym { get; set; }
}
您正在尝试反序列化一个 JSON 数组,但是您 trim 正在 [
和 ]
部分以便它不再是 JSON数组。删除 trim 行:
public static void something()
{
File.ReadLines(filePath)
.AsParallel()
.Select(JsonConvert.DeserializeObject<List<LiveAMData>>)
.ForAll(WriteRecord);
}
如果文件的每一行都是一个 JSON 数组,如下所示:
[{"ev":"Test1", "sym": "test"},{"ev":"Test2", "sym": "test"}]
您的 trim 行会将其更改为无效 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);
}