クラスにDataContract属性があるかどうかを判断するためのシリアライズ関数を記述しています。基本的には、クラスにDataContract属性がある場合は関数はDataContractSerializerを使用し、それ以外の場合はXmlSerializerを使用します。クラスにDataContract属性があるかどうかを調べるにはどうすればいいですか?
ありがとうございました!以下のような何か試してみてください
クラスにDataContract属性があるかどうかを判断するためのシリアライズ関数を記述しています。基本的には、クラスにDataContract属性がある場合は関数はDataContractSerializerを使用し、それ以外の場合はXmlSerializerを使用します。クラスにDataContract属性があるかどうかを調べるにはどうすればいいですか?
ありがとうございました!以下のような何か試してみてください
最も簡単な方法は、おそらくです:DCは、POCOのシリアル化をサポートしていることを、今、言った
bool f = Attribute.IsDefined(typeof(T), typeof(DataContractAttribute));
が、それは完全なものではありません。 DCのシリアライズのためのより完全なテストは次のようになります。
bool f = true;
try {
new DataContractSerializer(typeof(T));
}
catch (DataContractException) {
f = false;
}
:DataContractAttributeをテストするための
object o = this.GetType().GetCustomAttributes(true).ToList().FirstOrDefault(e => e is DataContractAttribute);
bool hasDataContractAttribute = (o != null);
私はDataContractAttributeのチェックに加えて、あなたもSystem.ServiceModel.MessageContractAttributeとSystem.SerializableAttributeを可能にすべきであることがわかりました。
bool canDataContractSerialize = (from x in value.GetType().GetCustomAttributes(true)
where x is System.Runtime.Serialization.DataContractAttribute
| x is System.SerializableAttribute
| x is System.ServiceModel.MessageContractAttributex).Any;
すべての属性を取得する必要はないため、この回答を受け入れたものとします。 – Alex