私はコードベースを調べましたが、私たちのDTOには[DataMember]
と[IgnoreDataMember]
の属性が混在しています。[DataMember]属性と[IgnoreDataMember]属性を持つ属性がありません
以前は、DTOのシリアル化を望まない場合は、[DataMember]
という属性を追加しないでください。それから私は他の属性を見て、いくつかの掘り下げをしました。これは、プロパティがシリアル化されないことを明示的に示しているようです。
今、私の質問は良いですか? [IgnoreDataMember]
を追加するか、何も追加しないでください。
私は尋ねたことがあります。[IgnoreDataMember]
は、すべてがシリアル化され、無視する必要がある(私は.Net 2を信じています)ことを指示しなければならない日であると思われます。その後、彼らはそれを逆に変更し、明示的にSHOULDをシリアル化する必要があります。今、あなたは両方を行うことができるようです。
また、MSによると: "IgnoreDataMemberAttribute属性はマークされていないタイプで使用された場合にのみ適用されます。同じクラスで '[DataContract]'と '[IgnoreDataMember]'を使うと、後者は無視されます。 –
@MichaelEdenfieldがペタンティックであるために、 'DataContractSerializer'はデフォルトで全てのパブリックフィールドとプロパティ*(パブリックフィールドは非常にまれです)。それは少しでもあいまいです。たとえば、 'NetDataContractSerializer'について言うと、デフォルトでは*すべてのフィールド*(publicとprivate)になりますが、プロパティはありません。 –
私はそれが古いスレッドだと知っていますが、昨日、Edenfieldそう正確にそうではありません。 私は1つのフィールドと4つのプロパティを持つクラスを持っています。 4つのプロパティはすべて、何らかの形式のデータ(バイト配列、文字列など)を変換し、それを1つのフィールドに書き込みます。私はクラスにDataContract属性を付けて、そのフィールドだけをDataMemberとしてマークしました。しかし、この方法では、デシリアライザはプロパティを無視せず、デフォルト値(フィールドを上書きする)に設定しました。プロパティに[IgnoreDataMember]を追加すると、問題が修正されました。だから無視されない –