2

一切都很好,对象正在使用 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 属性装饰,但它仍然有效。

我只是不知道可能出了什么问题,因为如果我没有重复引用,一切都很好,有什么想法吗?提前致谢。

4

1 回答 1

1

好的,由于没有人回答或帮助这件事,我自己找到了解决方案。不幸的是,.NET 自己的 DataContractSerializer 存在错误,相反我使用了 James NewtonKing 的 Json.NET,感谢他制作了一个非常适合我的情况的序列化器,而微软的却没有。

http://json.codeplex.com/

于 2012-08-30T17:41:01.183 回答