3

WCF サービス プロジェクトとは別のプロジェクトで Enum を定義する必要があります。列挙型とその他のデータを含むオブジェクトを作成しています。WCF サービスを介してクライアントにオブジェクトを渡すと、見つかりません。

列挙:

public enum Color
{
    Red = 1,
    Blue,
    Green,
}

渡されるオブジェクト:

public class MyObject
{
    public Color ColorEnum { get; set; }
    public string Name{ get; set; }
}

オブジェクトに ColourEnum = Color.Red というデフォルト値を指定した場合にのみ、サービスが機能します。設定しないと壊れます。私はこれが回避策であることを知っていますが、任意の値を設定する代わりに、より理にかなった解決策を探しています。なぜそれが壊れるのかを理解したいだけです

前もって感謝します

4

3 に答える 3

8

WCF プロジェクトに次のような列挙型があります。

[DataContract]
public class CarBookReq
{
    [DataMember]
    public string RefNo { get; set; }

    [DataMember]
    public RateType MyProperty { get; set; }

}

[DataContract]
public enum RateType
{
    [EnumMember]
    silver,
    [EnumMember]
    gold,
    [EnumMember]
    platinum,
    [EnumMember]
    young,
    [EnumMember]
    youngplus
}
于 2012-08-28T11:15:19.977 に答える
7

EnumMember列挙値に属性を追加してみてください。

于 2012-08-28T07:39:02.113 に答える
3

問題は、プロパティのデフォルト値がColorEnum列挙型の有効な値ではないことです: を作成するMyObjectと、プロパティのデフォルト値は 0 になり、0 は列挙型のどの値にも対応しません。

この動作を修正するには、複数のオプションがあります。

  • Red = 0enum 宣言の代わりにRed = 1(または省略しても同じ効果があります)使用できます。そうすれば、デフォルト値は無意味な値ではなく赤になります。
  • 「色が定義されていない」という意味を持つことがわかっている列挙型にデフォルト値 Default = 0 を追加できます。
  • プロパティを nullableColor?にすることができるため、 null はプロパティの正当な値とデフォルトの両方になります
  • MyObjectデフォルトの色を ColorEnum プロパティに割り当てるコンストラクタを使用できます。

    public MyObject() { this.ColorEnum = Color.Red; }

しかし、何をしても、列挙型のデフォルト値は常に 0 になります。0 が正当な列挙メンバーに対応していない場合、問題になることは間違いありません。

于 2012-08-28T07:59:05.787 に答える