我遇到了一个我无法解决的问题。所以我呼吁你:
我已经通过xsd.exe从XSD生成了一个类。 XSD包含转换为此类型枚举的列表:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.6.1087.0")]
[System.SerializableAttribute()]
public enum BlocsListe
{
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("2 blocs")]
Item2blocs,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("4 blocs")]
Item4blocs,
/// <remarks/>
ND,
}
使用此枚举的属性:
private BlocsListe _typeBlocs;
[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
public BlocsListe TypeBlocs
{
get
{
return this._typeBlocs;
}
set
{
this._typeBlocs = value;
}
}
我通过DataReader从数据库中提取元素,然后尝试将数据库中包含的值分配给对象的TypeBlocks属性。
这就是我被困住的地方。 在数据库中,存储XmlEnumAttribute的内容。 因此,我有这样的情况:我没有数据库中的值,其他我有一个对应于枚举项的值,以及存储在数据库中的值与枚举中的无项不对应的情况。
我尝试解析DataReader的内容,找到与XmlEnumAttribute之一的对应关系,然后分配我的属性。 我阻止了它。
为简化起见,其他一些枚举不包含XmlEnumAttribute(请参阅上面枚举的“ND”)。
如果您有任何建议,我是接受者。
提前谢谢
答案 0 :(得分:1)
最后找到了以下解决方案:
public static Dictionary<string,T> CheckEnumValue<T>(string value)
{
Dictionary<string,T> DicEnum = new Dictionary<string, T>();
if (!string.IsNullOrEmpty(value))
{
Type type = typeof(T);
MemberInfo[] memberInfo;
foreach (T b in Enum.GetValues(typeof(T)))
{
memberInfo = type.GetMember(b.ToString());
object[] attributes = memberInfo[0].GetCustomAttributes(typeof(System.Xml.Serialization.XmlEnumAttribute), false);
if (attributes.Length == 1)
{
XmlEnumAttribute attribute = attributes[0] as System.Xml.Serialization.XmlEnumAttribute;
if (attribute != null && !string.IsNullOrEmpty(attribute.Name) && attribute.Name.Equals(value))
DicEnum.Add(attribute.Name, b);
}
else
{
if (b.ToString().Equals(value))
DicEnum.Add(b.ToString(), b);
}
}
return DicEnum;
}
return null;
}