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