2011-10-26 17 views
1

属性を使用してDataContractシリアル化でクラスのプロパティの型の暗黙のキャストから文字列演算子を使用できるかどうかは誰でも知っていますか?例えばDataContractのDataMemberを文字列演算子への暗黙的キャストを使用

[DataContract] 
public class Root 
{ 
    [DataMember] 
    public Element Member { get; set; } 
} 

public class Element 
{ 
    private string value; 

    private Element(string value) 
    { 
     this.value = value; 
    } 

    public static implicit operator string(Element element) 
    { 
     return element.value != null ? element.value : ""; 
    } 

    public static implicit operator Element(string value) 
    { 
     if (Something()) return new Element(value); 
     throw new InvalidCastException() 
    } 
} 

ラース・エリック

+0

達成しようとしていることは何ですか? – Nagg

+0

システムが文字列を逆直列化して要素に戻すとはどうでしょうか? –

+0

定義した2つの演算子を使用して暗黙的に前後に変換することが期待されます。これは、typeというDataMember属性のプロパティを持つほど簡単でした。 IE。 [DataMember(Type = typeof(string))] –

答えて

1

これを達成するための簡単な方法(これはただのコンパイルに関する問題などを無視し、急いで手で書かれています)(シリアライゼーションの問題を処理するよりも簡単です)は次のようなものになります:

[DataContract] 
public class Root 
{ 
    [DataMember] 
    public string MemberString { get{ return (string)this.Member; } set{this.Member=(Element)value;} } 

    public Element Member { get; set; } 
} 
+0

私はそうしなければならないと思います。欠点は、enumを持つdtoからドメイン値型を持つコマンドを逆シリアル化しようとしていることです。私は文字列メンバで値の型を混乱させる必要があると思います。 –

+0

私はコマンドの列挙型にもスワップして、実行時に値型に変換させます。意味要素は、ドメイン外で知られているElementEnumになります。 –

3

これをしない理由があります。データコントラクトは単純なクロスプラットフォームのデータ転送オブジェクトであると考えられていますので、私はそこに魔法をかけません。基本型を必要なものに変換する直列化不可能なアクセサプロパティを作成します。

+0

次の投稿へのコメントを見る.. :) –

関連する問題