2

すべて問題なく、オブジェクトは 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 属性で装飾されていませんが、それでも機能しました。

何が間違っているのかわかりません。参照を繰り返していなければすべて問題ないので、アイデアはありますか? 前もって感謝します。

4

1 に答える 1

1

OK、その件について誰も答えたり助けたりしなかったので、私は自分で解決策を見つけました。残念ながら、.NET 独自の DataContractSerializer にはバグがあります。代わりに、James NewtonKing の Json.NET を使用しました。Microsoft のケースではうまくいかなかったのに、私のケースではうまくいった優れたシリアライザーを作成したことを彼に称賛します。

http://json.codeplex.com/

于 2012-08-30T17:41:01.183 に答える