2012-02-07 15 views
0

.NETで新しいプロジェクトを開始しています。作成するすべてのライブラリにSecurityTransparentAttributeが適用されます。SecurityTransparentアセンブリで不変構造体をシリアライズ

これらのアセンブリのうちの1つに、シリアル化が必要な不変の構造体があります。不変オブジェクトとして、任意のプロパティの設定者はありません(System.DateTimeなど)。

単に構造体を[Serializable]とマークすると、プロパティが読み込み専用であるため、何もシリアル化されません。これを処理する通常の方法は、ISerializableインターフェイスを実装し、GetObjectDataと特別なコンストラクタで処理することです。

この場合、私のアセンブリはセキュリティが透過的で、ISerializable.GetObjectDataSecurityCriticalです。このようにすることはできません。

ここにはどのようなオプションがありますか?私は本当に重要なものは必要ないので、すべてを持っていたいと思う。SecurityTransparentこれを除いて。

おかげ

+0

アイブ氏は本当にセキュリティと周りにプレイしていないことのためにtype converterを作成するためのルートを下ることができますが、あなたは日時を見ている場合GetObjectDataメソッドは、以下の属性があります[SecurityPermissionAttribute(SecurityAction.LinkDemand、Flags = SecurityPermissionFlag.SerializationFormatter)]あなたがこの状況でお手伝いしますか? – Fen

答えて

1

あなたがBinaryFormatterを使用している場合は、それはあなたの構造体ではなく、そのプロパティのフィールドをシリアル化し、それはフィールドがreadonlyをしている場合でも動作します。したがって、フィールドをシリアル化するだけで構造体をシリアル化することが適切な場合は、すべて設定されています。

+0

ありがとうございます。はい、うまくいきます。しかし、私はそれが必要なのはいくつかのケースではないと思う。この場合は、ネットワーク、Webサービス、RESTサービスなどで構造体を送信できることを確認したいと思います。 WCFがどのようにデータをシリアル化するかを確認します。 – Pedro

+0

これは、'DataContractSerializer 'と'NetDataContractSerializer'の両方がこのような構造体をシリアライズすることができるようです。彼らは「非シリアル化」を尊重します。それは私にとっては十分です:) – Pedro

0

私の最初の考えは、構造体に持つためにあまりにも多くの動作を直列化する方法の知識ですか?

あなたはので、これは仕方オフかもしれ属性

+0

はい、一般的に、私は構造体を単純に保つことに同意します。しかし、この場合、私はそれをシリアル化できる必要があります。私は 'System.DateTime'(これは'IISialializable 'を実装しています)のようにしています – Pedro

関連する問題