c# - 序列化集合正在转换为 JObject 而不是 JArray
问题描述
我有一种方法可以序列化 BSON 格式的数据对象 - 它运行良好。我试图扩展该方法,以便可以在集合上使用它,但是在反序列化数据时遇到了问题。我的序列化方法如下所示:
public byte[] SerializeCollection(T[] items)
{
JsonConvert.SerializeObject(items);
using (MemoryStream ms = new MemoryStream())
{
using (BsonDataWriter writer = new BsonDataWriter(ms))
{
JsonSerializer serializer = new JsonSerializer();
serializer.Serialize(writer, items, typeof(T[]));
}
return ms.ToArray();
}
}
我的反序列化方法是这样的:
public T[] DeserializeCollection(byte[] bytes, JsonSerializerSettings settings)
{
using (MemoryStream ms = new MemoryStream(bytes))
{
using (BsonDataReader reader = new BsonDataReader(ms))
{
JsonSerializer serializer = new JsonSerializer();
return serializer.Deserialize<T[]>(reader);
}
}
}
我发现的是,当我反序列化对象时,它会中断serializer.Deserialize<T[]>(reader)
消息:
Newtonsoft.Json.JsonSerializationException:'无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'ServiceBusSerialisationTests.Models.TestEventModel[]',因为该类型需要 JSON 数组(例如 [1,2, 3])正确反序列化。要修复此错误,要么将 JSON 更改为 JSON 数组(例如 [1,2,3]),要么将反序列化类型更改为普通的 .NET 类型(例如,不是像整数这样的原始类型,而不是像这样的集合类型可以从 JSON 对象反序列化的数组或列表。JsonObjectAttribute 也可以添加到类型中以强制它从 JSON 对象反序列化。路径“0”。
深入挖掘这似乎是因为序列化问题。当对象被序列化时,它实际上变成了单个对象而不是数组。IE
{ 0: {}, 1: {}, 2: {}, ...}
而不是
[{}, {}, {}, ...]
我可以做些什么来正确地将对象序列化 - 作为一个数组 - 或者将它从对象反序列化回一个数组?
我正在使用 .Net Core 2.2 和 Newtonsoft.Json.Bson 1.0.2。
解决方案
推荐阅读
- python - 如何在python中显示变量名?
- c++ - 如何确定窗口的任何部分是否对屏幕可见?
- python - 在冒号字符处拆分python中的字符串
- javascript - Javascript冒号表达式如何工作?
- java - 使用 JSch 在 webapp 中实现 SSH shell 终端
- sql - PostgreSQL:使用数组中选择的特定对象创建 JSON 消息
- python - Google Cloud 无法从 Jupyter Notebook 保存 TensorFlow 模型
- python - 无法从源 Pylance (reportMissingModuleSource) 解析导入“flask”
- javascript - NodeJS、HTML 表单、端点、req.body 返回未定义
- swift - 替换Occurences后如何在Swift中将文本转换为小数/双精度?