【发布时间】:2015-04-13 11:23:22
【问题描述】:
我们有一个对象列表,我们想将其序列化为 json 字符串。 这些对象每个都有一个属性,它是一个无类型的 ICollection。 问题是,我们想反序列化 JSON 并将其与另一个列表进行比较,并且在序列化时,我们得到了信息,它是哪种类型。
由于我们不能将属性更改为类型化列表,是否有可能告诉 JSON.NET:“它是非类型化的,但将其序列化,就像它是类型 T 的类型一样?”
我想,在反序列化并以某种方式传递类型时,我可能会强制转换它,但这会很混乱。
编辑:我现在通过将数据从 JSON 转换为预期的类型来使用凌乱的方式:
private static void CastAssertDataSources(ReportDataSource dataSourceFromDb, ReportDataSource dataSourceFromJson)
{
var dtoType = dataSourceFromDb.Data.GetType().GetElementType();
var dtosFromJson = new ArrayList(dataSourceFromJson.Data);
ArrayList typedJsonDtos = new ArrayList();
for (int i = 0; i < dataSourceFromJson.Data.Count; i++)
{
var jsonDto = dtosFromJson[i];
var containerJsonDto = (JContainer)jsonDto;
var typedJsonDto = containerJsonDto.ToObject(dtoType);
typedJsonDtos.Add(typedJsonDto);
}
dataSourceFromJson = new ReportDataSource(dataSourceFromJson.Name, typedJsonDtos);
dataSourceFromDb.AssertIsEqualTo(dataSourceFromJson);
}
“AssertisEqualTo”是我们的扩展,但我猜这应该没关系。
【问题讨论】:
-
在序列化无类型集合时,您能否显示当前正在创建的 JSON,以及您想要创建的 JSON?目前,当 Json.Net 序列化
ArrayList时,它只是序列化发生的任何事情。 -
是的,序列化不是问题,但是当我反序列化 JSON 时,我得到的只是一个“Jcontainer”对象数组。查看我的编辑
标签: c# json serialization