C# DataContractSerializer在对象列表中将重复的属性引用反序列化为null

C# DataContractSerializer在对象列表中将重复的属性引用反序列化为null,c#,.net,wcf,datacontractserializer,C#,.net,Wcf,Datacontractserializer,一切都很好,对象通过datacontractserializer序列化和反序列化都很好。然而,我的一位同事为我创建了一个样本,但并没有达到预期的效果。场景是这样的:我们有一个对象列表,它们由对象引用的属性组成,由于这些属性是从edmx创建的POCO实体,因此会有循环引用,我已将其PreserveObjectReferences设置为“true”,但是现在,如果列表中的两个项包含相同的属性引用,则其中只有一项反序列化,另一项将其属性反序列化为null DataContractSerializer的

一切都很好,对象通过datacontractserializer序列化和反序列化都很好。然而,我的一位同事为我创建了一个样本,但并没有达到预期的效果。场景是这样的:我们有一个对象列表,它们由对象引用的属性组成,由于这些属性是从edmx创建的POCO实体,因此会有循环引用,我已将其PreserveObjectReferences设置为“true”,但是现在,如果列表中的两个项包含相同的属性引用,则其中只有一项反序列化,另一项将其属性反序列化为null

DataContractSerializer的配置如下:

编辑:在解决了我自己的问题后,我只发布了序列化的简化版本

即使在简化版本中,我使用相同的序列化程序进行序列化和反序列化,并且使用相同的MemoryStream,它仍然是相同的,反序列化不会产生原始列表:(

POCO实体是由T4模板创建的,其名称为“POCO实体生成器”,可在visual studio的扩展联机库中找到。它们没有使用datacontract和datamember属性进行修饰,但仍然有效

我只是不知道会出什么问题,因为如果我没有重复的参考资料,一切都很好,有什么想法吗?
提前谢谢。

好的,因为没有人回答或帮助我,所以我自己找到了解决方案。不幸的是,.NET自己的DataContractSerializer有缺陷,我使用了James NewtonKing的Json.NET,他制作了一个伟大的序列化程序,对我的案例有效,而微软却没有


请提供您的POCO实体的代码以及如何序列化它们?
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);