プライベート メンバーを使用したオブジェクトのシリアル化
プライベート プロパティを使用してオブジェクトをシリアル化しようとすると、開発者はデフォルトの XMLSerializer で問題が発生する可能性があります。すべてのシリアル化されたプロパティへのパブリック アクセスが必要です。この問題は、プライベート ID プロパティを持つオブジェクトが読み取り専用の性質のためシリアル化できないという質問で示されています。
問題への対処
オブジェクトをシリアル化するにはプライベート メンバーでは、DataContractSerializer を使用できます。 XMLSerializer とは異なり、パブリック アクセスを必要とせず、代わりに属性を使用して作成されたデータ コントラクトに依存します。 DataContractSerializer を使用する例を次に示します。
[DataContract] class MyObject { public MyObject(Guid id) { this.id = id; } [DataMember(Name="Id")] private Guid id; public Guid Id { get {return id;}} }
DataContract 属性をクラスに追加し、DataMember 属性をプライベート Id プロパティに追加することで、DataContractSerializer にシリアル化を処理するように指示できます。
var ser = new DataContractSerializer(typeof(MyObject)); var obj = new MyObject(Guid.NewGuid()); using(XmlWriter xw = XmlWriter.Create(Console.Out)) { ser.WriteObject(xw, obj); }
このアプローチにより、カプセル化を損なうことなく、プライベート プロパティを持つオブジェクトのシリアル化が可能になります。 DataContractSerializer は XmlAttributes をサポートしておらず、代わりに XmlElements を優先することに注意することが重要です。
あるいは、シリアル化プロセスをより詳細に制御するには、IXmlSerializable インターフェイスの実装を検討してください。カスタム XML シリアル化および逆シリアル化メソッドを提供することにより、XMLSerializer でより高い柔軟性を実現できます。
以上がC# でプライベート メンバーを使用してオブジェクトをシリアル化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。