2016-05-26 15 views
2

ITypeSymbolをチェックして、シリアル化可能かどうかを確認する必要があります。そこITypeSymbolにはIsSerializableプロパティはませんか私はコンパイラAPIでの知っている拡張メソッドは、これを行うには、ので、ここで私が思い付くことができる最高の推測です:ITypeSymbolがコンパイラAPIでシリアル化可能かどうかを確認

  • IsValueTypeがtrueの場合ならば、それは
  • 直列化可能です型はGetAttributes()からの戻り値に[SerializableAttribute]を持ちます。それはシリアライズ可能です
  • ISerializableインターフェイスを実装している場合は、シリアル化可能です。

私には他の可能性がありますか?

+0

具体的な型を知るには、オブジェクトのGetType()メソッドを使用する必要があります。その後、有効なType.IsSerializableがあります。奇妙な質問btw、私は何かが不足しているようなにおいがする。 –

+0

@hansPassantここでReflection APIは使用できません。これはコンパイラAPIであり、 'ITypeSymbol'の' Type'へのアクセス権がありません(少なくとも私が知っているものはありません)。それが問題です。 – JasonBock

+0

Hmya、それはもちろん不可能です。実行時にこれがうまくいくことを望むだけです。ランタイム例外はプログラマーを正直に保ちますが、最終的なプログラムが良好な診断で失敗し、誰かが是正措置を取ることができることを確認してください。 –

答えて

2

Type.IsSerializableの複製を作成する場合は、its reference sourceをご覧ください。何それがないことである:

  • リターンtrueタイプ、すなわち、DelegateまたはEnumであるか、それらを継承する場合はタイプが[Serializable]属性
  • リターンtrueを持っている場合は、タイプdelegateまたはenum
  • ある場合
  • はそうでない。これはあなたの特別な値型のためのケーシングとISerializable implemことを意味false

を返します侵略は正しくない。

+0

私はこれに同意します....しかし、この唯一の問題は、 'Int32'型(' ITypeSymbol'経由)は 'GetAttributes()'呼び出しで '[Serializable]'属性を持たないということです。私は、コンパイラAPIを介してこれらの型のシリアル化フラグがオンになっているかどうかを判断する方法を理解できません。 – JasonBock

+0

基本的に、私はReflectionを介してシリアライズ可能なフラグ設定を取得する方法を考え出しました。これを答えにしてください。 – JasonBock

関連する問題