2010-06-27 52 views
1

我有一个运行在WCF上的.NET应用程序。在那个应用程序中,我定义了各种类型(“CourseType”,“PresentationType”,“HierarchyType”等)作为枚举。这些都是自动与数据库同步,因此我可以写漂亮的代码,如:Enum可以完全序列化吗?

public enum CourseType { 
    Online = 1, 
    Classroom = 2 
} 

...

if(course.Type == CourseType.Online) { 
    // do stuff on the server 
} 

是否有人知道的一个很好的方式序列化整个枚举我想知道所以我可以在JavaScript中编写类似的语句。

请注意,我是而不是询问序列化的价值。我要的是带有某种JavaScript对象的,看起来像落得:

CourseType = { 
    'online' : 1, 
    'classroom': 2 
}; 

我可以通过反射,我知道做到这一点,但我希望有某种类型的内置解决方案.. 。

回答

1

使用JSON序列化与匿名类型的作品真的很好,我认为如果枚举是相对静态的,不会经常改变:

new { CourseType.Online, CourseType.Classroom } 

但是,如果你正在寻找的东西来处理动态或多个枚举没有维护,你可以创建一个迭代ov的东西呃名称值对,并创建一个字典序列化(不需要反射)。

public static IDictionary<string, int> ConvertToMap(Type enumType) 
{ 
    if (enumType == null) throw new ArgumentNullException("enumType"); 
    if (!enumType.IsEnum) throw new ArgumentException("Enum type expected", "enumType"); 

    var result = new Dictionary<string, int>(); 
    foreach (int value in Enum.GetValues(enumType)) 
    result.Add(Enum.GetName(enumType, value), value); 

    return result; 
} 

编辑

如果你需要一个JSON序列......我真的很喜欢使用JSON.NET http://james.newtonking.com/projects/json-net.aspx

0

这里亚去:

private enum CourseType 
{ 
    Online = 1, 
    Classroom = 2 
} 

private void GetCourseType() 
{ 
    StringBuilder output = new StringBuilder(); 

    string[] names = 
     Enum.GetNames(typeof(CourseType)); 

    output.AppendLine("CourseType = {"); 
    bool firstOne = true; 
    foreach (string name in names) 
    { 
     if (!firstOne) 
      output.Append(", " + Environment.NewLine); 
     output.Append(string.Format("'{0}' : {1:N0}", name, (int)Enum.Parse(typeof(CourseType), name))); 

     firstOne = false; 
    } 
    output.AppendLine(Environment.NewLine + "}"); 

    // Output that you could write out to the page... 
    Debug.WriteLine(output.ToString()); 
} 

此输出:

CourseType = { 
'Online' : 1, 
'Classroom' : 2 
}