C# 将[Flags]枚举序列化为字符串
是否有方法指定类中的[Flags]枚举字段应序列化为字符串表示形式(例如“Sunday,周二”),而不是整数值(例如5) 更具体地说,在web服务中返回以下SomeClass类型时,我希望得到一个名为“Days”的字符串字段,但得到的是一个数字字段C# 将[Flags]枚举序列化为字符串,c#,.net,serialization,flags,C#,.net,Serialization,Flags,是否有方法指定类中的[Flags]枚举字段应序列化为字符串表示形式(例如“Sunday,周二”),而不是整数值(例如5) 更具体地说,在web服务中返回以下SomeClass类型时,我希望得到一个名为“Days”的字符串字段,但得到的是一个数字字段 [Flags] public enum DaysOfWeek { Sunday = 0x1, Monday = 0x2, Tuesday = 0x4, Wednesday = 0x8, Thursday = 0
[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;
}
不,但是您可以通过创建一个执行相同操作的结构来定义自己的“枚举”
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";
}
}
}
我不知道DataContractSerializer,但使用XmlSerializer,它将被序列化为“星期日-星期二”。我不是WCF专家,但我想我在某个地方读到,您可以指定必须使用XmlSerializer而不是DataContractSerializer,我能想到的最好的方法是在MyEnum上创建一个扩展方法,该方法在MyEnum.GetMembers()上迭代,并在MyEnum被序列化时按位和非零,调用ToString()并聚合到输出字符串