2009-06-18 16 views
2

CodeDOMでパブリックゲッターと保護されたセッターでプロパティを生成することは可能ですか?目標は次のようなものを達成することです。パブリックゲッター、CodeDOMで保護されたセッター

[Serializable] 
public class Wrapper { 
    public Wrapper() { } 
    private string _Field; 
    public string Field { get; protected set; } 
} 

私はそれで、そのようなLINQ、反射、相続直列化などネット機能を使用する方が簡単ですので、.NETラッパーをコンパイルしたいのために大規模なCOMベースのAPIを持っています。唯一実行可能な方法は、コード生成を使用してこの作業の大部分を自動化することです。

これらのオブジェクトには、プロパティ設定ツールが必要なシリアル化によって公開したいいくつかの読み取り専用プロパティが含まれています。しかし、あまりにも長い間、私はセッターを保護するか同様の方法を見つけることができませんでした。

一つの方法は、直列化可能ではないとしてプロパティをマークし、_FIELDをシリアル化するかもしれないが、シリアライズ出力のための1つの目標はウェブであるので、私は、シリアライザを指揮全て可能シリアライザの属性を持つプライベートメンバを帰する必要があるだろうシリアライズにきれいな名前(アンダースコアなし)を使用する。同じ理由で私はカスタムシリアル化が不可能だと信じています。

私はそれを正確に逆シリアル化できることはそれほど重要ではありません。デシリアライズ中またはデシリアライズ中に値が元の値のままであることは重要ではありません。プロパティは、APIコンシューマが読み取り専用フィールドを変更しようとするのを防ぎ、何に影響を与えないのか不思議に思って、混乱を減らすためにのみ読み込み専用です。

+0

hm。 XmlSerializerとJSON.Net JsonSerializerはどちらもそれをシリアル化できます。シリアライザがシリアライズを開始するときにシリアライザがデシリアライズできることを間違って記憶していたはずです。だから元の問題は決してそこにはなかったが、私はまだCodeDOMで保護されたゲッターを作ることが可能かどうか聞いてみたい。 –

答えて

1

これをラッピングするだけです。生の文字列出力のためにCodeDOM saveでこれを行う方法はありません。

XMLSerializerはシリアライザがクラスをシリアル化できますが、保護されたセッタで値をシリアル化しません。

これはできません。私が使用した別の方法は、すべてのプロパティの読み取り/書き込みを持つ同様のクラスのインスタンスを返すこれらのクラスのそれぞれにToSerializableType()メソッドを生成することでした。

関連する問題