【发布时间】:2023-03-19 00:21:01
【问题描述】:
我尝试使用 JSON.NET 序列化和反序列化 ConcurrentBag:
var bag = new ConcurrentBag<int>(){2};
var jsonSerializer = new JsonSerializer();
using(var aStream = new MemoryStream())
{
var sw = new BsonWriter(aStream);
jsonSerializer.Serialize(sw, bag);
aStream.Position = 0;
var rw = new BsonReader(aStream);
jsonSerializer.Deserialize(rw,bag.GetType());
}
我得到了这个例外:
无法反序列化当前 JSON 对象(例如 {"name":"value"}) 输入类型 'System.Collections.Concurrent.ConcurrentBag`1[System.Int32]' 因为 该类型需要一个 JSON 数组(例如 [1,2,3])来反序列化 正确。要修复此错误,请将 JSON 更改为 JSON 数组 (例如 [1,2,3])或更改反序列化类型,使其成为正常的 .NET 类型(例如,不是像整数这样的原始类型,也不是集合 可以从 JSON 反序列化的数组或列表等类型 目的。 JsonObjectAttribute 也可以添加到类型中来强制它 从 JSON 对象反序列化。路径“0”。
如果我不将类型作为第二个参数传递给反序列化器,那很好,但我有一个通用对象作为输出。
有人知道为什么会这样吗?
【问题讨论】:
标签: .net json c#-4.0 json.net deserialization