DataContractSerializer:DataContract / DataMember属性なしでクラス/メンバをシリアル化する方法

datacontractserializer efpocoadapter entity-framework serialization

質問

DataContractSerializerでは、クラスとメンバーをDataContract属性とDataMember属性でマークする必要があります。しかし、私の場合、クラスはEFPocoAdapaterフレームワークで自動生成され、これらの属性は存在しません。

これらの属性が存在しない状態でDataContractSerializerを使用してすべてのメンバーを強制的にシリアル化する方法はありますか

Alexdejから:

これは3.5SP1で変更されました、あなたがそれを見たことを願っています: http ://www.pluralsight.com/community/blogs/aaron/archive/2008/05/13/50934.aspx

受け入れられた回答

あなたはできません - わかりやすく単純です。この属性は、DataContractSerializerがどの要素をシリアル化するかを選択するために必要です。基本的にすべてをシリアライズするXmlSerializer(これを無視するよう明示的に指示しない限り)とは対照的に、DataContractSerializerは "オプトイン"です - どのフィールドやプロパティを明示的に指定する必要があります。シリアル化します。

更新:何人かの人々が指摘したように、.NET 3.5 SP1では、Microsoftはそれらの規則を少し緩めました - どんなpublic read / writeプロパティもDataContractSerializerによって自動的に直列化されるでしょう。同時に、あなたのクラスはパラメータのないデフォルトコンストラクタを持つ必要があります。

もちろん、これ:

  • プライベートなものをシリアル化することは許可されていません - シリアル化したい場合は、パブリックなread / writeプロパティとして公開する必要があります。
  • 定義済みの選択されたパラメータの順序を指定することはできません - 単にクラスに現れる順序でそれらを使用します
  • 逆シリアル化のために、クラス内にパラメータのないコンストラクタを再度用意する必要があります。

私はいまだにこれらのことが明確かつ明確であるべきだと思い、もはや必要とされないものを怠惰な/ずさんなプログラミングのための道を切り開く - 私はそれを好きではない。あなたがしたい場合は、あなたは[DataMember]であなたのプロパティを明示的にマークせずに今それを使用することができます.....

マーク


人気のある回答

[Serializable]属性でクラスをマークするだけです。シリアル化したくないメンバーは[NonSerialized]でマークしてください。 [Serializable]を指定すると、デフォルトですべてのフィールドがシリアル化されます。[DataContract]を指定すると、[DataMember]のマークが付いているフィールド以外のフィールドはデフォルトでシリアル化されません。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ