Bum*_*Bee 2 c# enums linq-to-xml
我试图从XML文件中提取数据并将其保存为我的C#类/对象.我的问题是
我有一个像这样的XMl文件
<personal_auto xmlns = "http://cp.com/rules/client">
<claim id = "s1" type = "Subject Section">
<report >
</report>
<policy>
</policy>
</claim>
<claim id = "s2" type = "Vehichle Section">
<report >
</report>
<policy>
</policy>
</claim>
<claim id = "s3" type = "Agent Section">>
<report
</report>
<policy>
</policy>
</claim>
</personal_auto>
Run Code Online (Sandbox Code Playgroud)
我有这样的枚举
public enum typesectionEnum
{
[Description("Subject Section")]
subjectSection,
[Description("Vehicle Section")]
vehicleSection,
[Description("Possible Related Section")]
possibleRelatedSection,
[Description("Agent (Summary) Section")]
AgentSection
}
Run Code Online (Sandbox Code Playgroud)
我试图从XML文件中提取数据并保存到我的C#类/对象.
List<claim> = ( from d in query.Descendants(xmlns + "claim")
select new Claim
{
id = d.Attribute("id").value,
type = ????
}
).ToList (),
Run Code Online (Sandbox Code Playgroud)
我想知道的是,我想在我的应用程序中设置将访问xml文件中的值的值.
如果DescriptionAttributes与XML中的type属性字符串完全匹配,则可以使用反射.
编辑:转换为通用
public TEnum GetEnum<TEnum>(string input) where TEnum : struct
{
if (!typeof(TEnum).IsEnum)
throw new Exception(typeof(TEnum).GetType() + " is not en enum");
Type dataType = Enum.GetUnderlyingType(typeof(typesectionEnum));
foreach (FieldInfo field in
typeof(typesectionEnum).GetFields(BindingFlags.Static | BindingFlags.GetField |
BindingFlags.Public))
{
object value = field.GetValue(null);
foreach (DescriptionAttribute attrib in field.GetCustomAttributes(true).OfType<DescriptionAttribute>())
{
if (attrib.Description == input)
{
return (TEnum)value;
}
}
}
return default(TEnum);
}
Run Code Online (Sandbox Code Playgroud)
然后像这样调用它:
select new Claim
{
id = d.Attribute("id").value,
type = GetEnum<typesectionEnum>(d.Attribute("type").value),
}
Run Code Online (Sandbox Code Playgroud)