.net 枚举是否可以完全序列化?

.net 枚举是否可以完全序列化?,.net,javascript,serialization,.net,Javascript,Serialization,我有一个.NET应用程序在WCF上运行。在该应用程序中,我定义了各种类型(“CourseType”、“PresentationType”、“HierarchyType”等)作为枚举。这些代码会自动与数据库同步,因此我可以编写如下代码: public enum CourseType { Online = 1, Classroom = 2 } 我想知道是否有人知道序列化整个枚举的好方法,这样我就可以用JavaScript编写类似的语句 请注意,我并不是只要求序列化值。我想要的是最终得到

我有一个.NET应用程序在WCF上运行。在该应用程序中,我定义了各种类型(“CourseType”、“PresentationType”、“HierarchyType”等)作为枚举。这些代码会自动与数据库同步,因此我可以编写如下代码:

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

我想知道是否有人知道序列化整个枚举的好方法,这样我就可以用JavaScript编写类似的语句

请注意,我并不是只要求序列化值。我想要的是最终得到某种JavaScript对象,它看起来像:

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

我知道,我可以通过反射来实现这一点,但我希望有某种内置解决方案…

如果枚举是相对静态的且不会经常更改,我认为使用匿名类型的JSON序列化程序非常有效:

new { CourseType.Online, CourseType.Classroom }
但是,如果您正在寻找不需要维护就可以处理动态或多个枚举的方法,那么可以创建一些方法来迭代名称-值对,并创建一个要序列化的字典(不需要反射)

公共静态IDictionary ConvertToMap(类型enumType)
{
如果(enumType==null)抛出新的ArgumentNullException(“enumType”);
如果(!enumType.IsEnum)抛出新的ArgumentException(“需要枚举类型”,“枚举类型”);
var result=newdictionary();
foreach(Enum.GetValues(enumType)中的int值)
添加(Enum.GetName(enumType,value),value);
返回结果;
}
编辑

如果您需要JSON序列化程序。。。我非常喜欢使用JSON.NET

我认为,如果枚举是相对静态的,并且不会经常更改,那么使用匿名类型的JSON序列化程序非常有效:

new { CourseType.Online, CourseType.Classroom }
但是,如果您正在寻找不需要维护就可以处理动态或多个枚举的方法,那么可以创建一些方法来迭代名称-值对,并创建一个要序列化的字典(不需要反射)

公共静态IDictionary ConvertToMap(类型enumType)
{
如果(enumType==null)抛出新的ArgumentNullException(“enumType”);
如果(!enumType.IsEnum)抛出新的ArgumentException(“需要枚举类型”,“枚举类型”);
var result=newdictionary();
foreach(Enum.GetValues(enumType)中的int值)
添加(Enum.GetName(enumType,value),value);
返回结果;
}
编辑

如果您需要JSON序列化程序。。。我非常喜欢使用JSON.NET 给你:

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
}
给你:

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
}