一切都很好,对象正在使用 datacontractserializer 进行序列化和反序列化。然而,我的一位同事为我创建了一个样本,但并没有按预期进行。场景是这样的:我们有一个对象列表,它们由作为对象引用的属性组成,因为这些是从 edmx 创建的 POCO 实体,所以会有循环引用,我已将 PreserveObjectReferences 设置为“true”,但现在如果列表中的两个项目包含相同的属性引用,则只有其中一个会反序列化,而另一个会将其属性反序列化为 null!!!!
DataContractSerializer 配置如下:
编辑:解决我自己的问题后,我只发布了序列化的简化版本。
即使在简化版本中,我使用相同的序列化器进行序列化和反序列化,以及相同的 MemoryStream,它仍然是相同的,反序列化不会产生原始列表 :((
returnType = result.GetType().ToString();
serializer = new DataContractSerializer(result.GetType(), null, 0x7fff, false, true, null);
tempStream = new MemoryStream();
serializer.WriteObject(tempStream, result);
tempStream.Position = 0;
serializedReturn = new StreamReader(tempStream).ReadToEnd();
tempStream.Position = 0;
object res = serializer.ReadObject(tempStream);
POCO 实体由名为“POCO 实体生成器”的 T4 模板创建,可在 Visual Studio 的扩展在线图库中找到。它们没有用 datacontract 和 datamember 属性装饰,但它仍然有效。
我只是不知道可能出了什么问题,因为如果我没有重复引用,一切都很好,有什么想法吗?提前致谢。