我在WCF上运行了一个.NET应用程序。在该应用程序中,我定义了各种“类型”(“CourseType”,“PresentationType”,“HierarchyType”等)作为枚举。这些会自动与数据库同步,因此我可以编写好的代码,如:
public enum CourseType {
Online = 1,
Classroom = 2
}
...
if(course.Type == CourseType.Online) {
// do stuff on the server
}
我想知道是否有人知道序列化整个枚举的好方法,所以我可以在JavaScript中编写类似的语句。
请注意,我不询问是否仅序列化该值。我想要的是最终得到某种类似于以下的JavaScript对象:
CourseType = {
'online' : 1,
'classroom': 2
};
我知道,我可以通过反思做到这一点,但我希望有一种内置的解决方案......
答案 0 :(得分:1)
如果枚举是相对静态的并且不会经常更改,那么在我看来,使用具有匿名类型的JSON序列化程序非常有效:
new { CourseType.Online, CourseType.Classroom }
但如果您正在寻找能够处理动态或多个枚举而无需维护的东西,您可以创建一些迭代名称值对的东西,并创建一个要序列化的字典(不需要反射)。
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 Serializer ......我真的很喜欢使用JSON.NET http://james.newtonking.com/projects/json-net.aspx
答案 1 :(得分: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
}