すべて問題なく、オブジェクトは datacontractserializer で正常にシリアル化および逆シリアル化されていました。しかし、私の同僚の 1 人が私のためにサンプルを作成しましたが、それは想定どおりにはいきませんでした。シナリオは次のようなものです。オブジェクトのリストがあり、オブジェクト参照であるプロパティで構成されています。これらは edmx から作成された POCO エンティティであるため、PreserveObjectReferences を「true」に設定した循環参照が存在しますが、今はリスト内の 2 つの項目に同じプロパティ参照が含まれている場合、そのうちの 1 つだけが逆シリアル化され、もう 1 つの項目のプロパティは 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 エンティティは、Visual Studio の拡張オンライン ギャラリーにある「POCO エンティティ ジェネレーター」という名前の T4 テンプレートによって作成されます。それらは datacontract および datamember 属性で装飾されていませんが、それでも機能しました。
何が間違っているのかわかりません。参照を繰り返していなければすべて問題ないので、アイデアはありますか? 前もって感謝します。