我必须从XML动态创建Enum。 XML格式如下:如何使用EnumBuilder动态创建枚举时设置属性
<?xml version="1.0" encoding="utf-8"?>
<Category xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Game>
<Name>Tekken</Name>
<Code>10</Code>
</Game>
<Game>
<Name>NFS</Name>
<Code>20</Code>
</Game>
<Game>
<Name>FinalFa</Name>
<Code>40</Code>
</Game>
</Category>
我想创建枚举,看起来像这样:
[DataContract]
[Flags]
public enum Category
{
[EnumMember]
Tekken = 10,
[EnumMember]
NFS = 20,
[EnumMember]
FinalFa = 40,
}
到目前为止,我已经能够创造这样的:
public enum Category
{
Tekken = 10,
NFS = 20,
FinalFa = 40,
}
C#代码用于生成枚举:
private static void Create()
{
AppDomain currentDomain = AppDomain.CurrentDomain;
AssemblyName asmName = new AssemblyName("EnumAssembly");
AssemblyBuilder asmBuilder = currentDomain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.RunAndSave);
ModuleBuilder mb = asmBuilder.DefineDynamicModule(asmName.Name, asmName.Name + ".dll");
EnumBuilder eb = mb.DefineEnum("MyNamespace.Category", TypeAttributes.Public, typeof(int));
FieldBuilder fb1 = eb.DefineLiteral("Tekken", 10);
FieldBuilder fb2 = eb.DefineLiteral("NFS", 20);
FieldBuilder fb3 = eb.DefineLiteral("FinalFa", 40);
Type eType = eb.CreateType();
asmBuilder.Save(asmName.Name + ".dll");
foreach (object obj in Enum.GetValues(eType))
{
Console.WriteLine("{0}.{1} = {2}", eType, obj, ((int)obj));
}
}
如何将属性[DataContract],[Flags]和[EnumMember]添加到我的枚举中?
我试过这种方法,并设置属性后,我创建EnumAssembly DLL。然后我在另一个项目中引用了这个dll,并检查了这个枚举的元数据(转到定义F12)。但是[EnumMember]属性不可见。我在这里错过了什么吗? – Vaibhav 2014-10-09 13:24:50
我错过了添加命名空间System.Runtime.Serialization。添加后[EnumMember]属性可见。 – Vaibhav 2014-12-16 04:30:37