• C# 对象转XML 支持匿名类


    在网上找了很多关于对象转XML的,大多不支持匿名类转换,今天在stackoverflow找了一篇文章  但是有些许BUG  已经修复

     1 public static class ObjectToXML
     2     {
     3         private static readonly Type[] WriteTypes = new[] {
     4         typeof(string), typeof(DateTime),typeof(decimal), typeof(Guid),
     5         };
     6         public static bool IsSimpleType(this Type type)
     7         {
     8             return type.IsPrimitive || WriteTypes.Contains(type) || type.IsEnum;
     9         }
    10         public static XElement ToXml(this object input)
    11         {
    12             return input.ToXml(null);
    13         }
    14 
    15         private static string GetXMLElementAttributeName(PropertyInfo info)
    16         {
    17             string attributeName = "";
    18 
    19             var attr = info.GetCustomAttributes(true);
    20             if (attr != null && attr.Length > 0)
    21             {
    22                 
    23                 foreach (var item in attr)
    24                 {
    25                     if (item is XmlElementAttribute)
    26                     {
    27                         var temp = item as XmlElementAttribute;
    28                         attributeName = temp.ElementName;
    29 
    30                         
    31                     }
    32                     else if(item is XmlRootAttribute)
    33                     {
    34                         var temp = item as XmlRootAttribute;
    35                         attributeName = temp.ElementName;
    36                     }
    37                 }
    38             }
    39             return attributeName;
    40         }
    41 
    42         private static object GetPropertyValue(object input, PropertyInfo info)
    43         {
    44             if (info.PropertyType.IsEnum)
    45             {
    46                 return (int)info.GetValue(input);
    47             }
    48             return info.GetValue(input);
    49         }
    50 
    51         public static XElement ToXml(this object input, string element)
    52         {
    53             if (input == null)
    54                 return null;
    55 
    56             if (string.IsNullOrEmpty(element))
    57                 element = "object";
    58 
    59             element = XmlConvert.EncodeName(element);
    60             var ret = new XElement(element);
    61 
    62             if (input != null)
    63             {
    64                 var type = input.GetType();
    65                 var props = type.GetProperties();
    66                 var elements = from prop in props
    67                                let name = XmlConvert.EncodeName(GetXMLElementAttributeName(prop) == "" ? prop.Name : GetXMLElementAttributeName(prop))
    68                                let val = GetPropertyValue(input,prop)
    69                                let value = prop.PropertyType.IsSimpleType()
    70                                     ? new XElement(name, val)
    71                                     : val.ToXml(name)
    72                                where value != null
    73                                select value;
    74 
    75                 ret.Add(elements);
    76             }
    77 
    78             return ret;
    79         }
    80     }

    调用:

    var model = new {
       Name = "张三",
       Age = 18 
    };
    
    model.ToXml("RequestParameter").ToString();

    记得引入命名空间

  • 相关阅读:
    errorC4430解决办法(vs2013)
    c++获取系统当前时间写入txt文件
    黑苹果安装记录(史上最简单的安装教程——小白福利)
    运行vs生成的exe出现应用程序无法正常启动(0x000007b)解决方案(亲测有效)
    数据可视化工具grafans,忘记密码恢复默认admin(基本使用教程)
    opencv任意形状角度透视变换(代码分析清晰)
    opencv两张规格一样的图片拼接(纵向和横向)
    linux3
    linux2
    linux1
  • 原文地址:https://www.cnblogs.com/cx36727/p/10689222.html
Copyright © 2020-2023  润新知