C#中反序列化枚举类型

C#中使用反射进行反序列化

  1. PropertyInfo propertyInfo = huduanData.GetType().GetProperty(xmlPro[a].Name);
  2. if (propertyInfo != null && xmlHuduan[i].InnerText != "")
  3. {
  4. propertyInfo.SetValue(huduanData, ConvertUtils.ConvertType(xmlPro[a].InnerText,propertyInfo.PropertyType) );
  5. }

以上代码可以对数据对象 huduan 类型进行反序列化。将其中所有的字段的值给获取过来,并且按照反射反序列化回来。但是当字段类型为自定义的枚举的时候,就会提示 不能转换类型
解决办法
定义一个新的方法。判断该字段类型是否为 枚举如果是枚举将进行对应的转换否则使用系统默认的方法

  1. public static class ConvertUtils
  2. {
  3. public static object ConvertType(object value, Type type)
  4. {
  5. if (type.IsEnum)
  6. {
  7. return Enum.Parse(type, value.ToString());
  8. }
  9. else
  10. {
  11. return Convert.ChangeType(value, type);
  12. }
  13. }
  14. }
2024-05-13 23:41:36  user 阅读(129) 评论(0) 标签:C#,Enum,反射,反序列化 分类:C#