设为首页 加入收藏

TOP

C# 对象转XML 支持匿名类
2019-09-17 19:07:40 】 浏览:32
Tags:对象 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();

记得引入命名空间

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C# 不添加WEB引用调用WSDL接口 下一篇SSRS分页

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目