2

サーバーのソリューションに列挙値があります。

public enum TaskStatus
{
    //Description attribute modifies how an Enum's label is displayed when displayed via MVC.
    [Description("Draft")]
    Draft = 1,
    [Description("Being Planned")]
    BeingPlanned = 2,
    [Description("Waiting For Change")]
    WaitingForChange = 3,
    [Description("In Progress")]
    InProgress = 4,
    [Description("Waiting For Customer Information")]
    WaitingCustomerInformation = 5,
    [Description("Cancelled")]
    Cancelled = 6,
    [Description("Completed")]
    Completed = 7
};

この列挙値はシリアル化され、WCFサービス参照としてクライアントに渡されます。

次に、モデルに列挙値を表示します。ただし、シリアル化/逆シリアル化プロセス中にDescription属性が削除されていることに注意してください。

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.450")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cormant.com/cswebapi")]
public enum TaskStatus {

    /// <remarks/>
    Draft,

    /// <remarks/>
    BeingPlanned,

    /// <remarks/>
    WaitingForChange,

    /// <remarks/>
    InProgress,

    /// <remarks/>
    WaitingCustomerInformation,

    /// <remarks/>
    Cancelled,

    /// <remarks/>
    Completed,
}

私の列挙型をエンドユーザーにどのように表示するかを説明する機能が必要です。これを行うことは可能ですか?デシリアライズ後に属性を再適用できますか?

4

1 に答える 1

1

私の知る限り、WCF サービス参照を含めることにより、コード生成プロセスを通じて属性をクライアントに転送することはできません。クライアント側で属性を取得する方法はありません。

あるプロジェクトに取り組んでいるときに、非常に効果的なトリックを 1 つ実行しました。以下に示すように、その Enum ファイルをクライアント プロジェクトに参照ファイル (リンクとして追加) として追加しました。

ここに画像の説明を入力

このようにして、クライアント側で Description 属性を持つ Enum のコピーを持つことができます。それを変更しようとすると、参照ファイルであるため、実際には Server Enum ファイルを変更していますが、魔法のように、ビルド プロセス時にクライアント プロジェクトの一部としてコンパイルされます。これは本当に素晴らしい回避策です。

これがあなたを助けることを願っています:)

于 2012-10-12T17:33:21.187 に答える