2

DataContractJsonSerializerでは処理できないが、DataContractSerializer で処理できる シリアル化/逆シリアル化のシナリオはありますか?

特に、循環参照について考えています。この MSDN ページでは、コンストラクターDataContractSerializerで を使用して循環参照を管理する方法について説明しています。一方、DataContractAttribute.IsReferenceのドキュメントには、その適用範囲が に限定されていることが明示的に記載されていません。IsReference = trueDataContractAttributeDataContractSerializer

プロパティDataContractJsonSerializerも尊重しますか?IsReference

4

1 に答える 1

7

午後の古き良きハンズオンテストのようなものはありません...

DataContractAttribute.IsReference = true連載対象クラスに応募する場合、

[DataContract(IsReference = true)]
public class SerializableClass {
...
}

を使用してシリアル化しようとするとDataContractJsonSerializer

var serializer = new DataContractJsonSerializer(typeof(SerializableClass));
serializer.WriteObject(stream, obj);

WriteObjectメソッドは例外をスローします。

System.Runtime.Serialization.SerializationException : タイプ 'SerializableClass' は、IsReference 設定が 'True' であるため、JSON にシリアル化できません。参照を表す標準化された形式がないため、JSON 形式は参照をサポートしません。シリアル化を有効にするには、型または型の適切な親クラスで IsReference 設定を無効にします。

一方DataContractSerializer、同じオブジェクトをシリアル化するために使用すると、シリアル化 (および逆シリアル化) は魅力的に機能します。

、誰かが とDataContractJsonSerializer比較して のより多くの制限を知っているならDataContractSerializer、私はすべて耳です...

于 2013-11-14T13:35:27.940 に答える