2009-08-24 6 views
3

클래스의 [Flags] 열거 필드를 정수 값 (예 : 5)이 아닌 문자열 표현 (예 : "일요일, 화요일")으로 직렬화하도록 지정하는 방법이 있습니까? ?[Flags] 열거 형을 문자열로

웹 서비스에서 다음 SomeClass 형식을 반환 할 때 "Days"라는 문자열 필드를 가져 오려면 숫자 필드가 나타납니다.

[Flags] 
public enum DaysOfWeek 
{ 
    Sunday = 0x1, 
    Monday = 0x2, 
    Tuesday = 0x4, 
    Wednesday = 0x8, 
    Thursday = 0x10, 
    Friday = 0x20, 
    Saturday = 0x40 
} 
[DataContract] 
public class SomeClass 
{ 
    [DataMember] 
    public DaysOfWeek Days; 
} 

답변

2

아니,하지만 당신은 같은 일을하는 구조체를 작성하여 자신의 "열거"를 정의 할 수 있습니다,

public struct MyDayOfWeek 
{ 
    private int iVal; 
    private bool def; 

    internal int Value 
    { 
     get { return iVal; } 
     set { iVal = value; } 
    } 
    public bool Defined 
    { 
     get { return def; } 
     set { def = value; } 
    } 
    public bool IsNull { get { return !Defined; } } 

    private MyDayOfWeek(int i) 
    { 
     iVal = i; 
     def = true; 
    }   

    #region constants 
    private const int Monday = new MyDayOfWeek(1); 
    private const int Tuesday = new MyDayOfWeek(2); 
    private const int Wednesday = new MyDayOfWeek(3); 
    private const int Thursday = new MyDayOfWeek(4); 
    private const int Friday = new MyDayOfWeek(5); 
    private const int Saturday = new MyDayOfWeek(6); 
    private const int Sunday = new MyDayOfWeek(7); 
    #endregion constants 

    public override string ToString() 
    { 
     switch (iVal) 
     { 
      case (1): return "Monday"; 
      case (2): return "Tuesday"; 
      case (3): return "Wednesday"; 
      case (4): return "Thursday"; 
      case (5): return "Friday"; 
      case (6): return "Saturday"; 
      case (7): return "Sunday"; 
     } 
    } 
} 
1

내가 DataContractSerializer에 대해 잘 모르지만, XmlSerializer를 함께 직렬화된다 "일요일 화요일". 저는 WCF 전문가는 아니지만 DataContractSerializer 대신 XmlSerializer를 사용해야한다고 지정할 수 있다고 생각합니다.

0

가장 좋은 방법은 MyEnum을 반복하는 MyEnum에서 확장 메서드를 만드는 것입니다. GetMembers() 및 ToString()을 호출하고 출력 문자열에 집계하여 MyEnum을 비트 단위로 0이 아닌 값으로 직렬화하는 경우

관련 문제