VB.net 2010 視頻教程 VB.net 2010 視頻教程 VB.net 2010 視頻教程
SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
當前位置:
魔兽世界wow > 編程開發 > c#教程 >
  • C#教程之

  • 2019-04-13 21:06 來源:未知

魔兽世界wow www.geyjm.icu 在網上找了很多關于對象轉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();

記得引入命名空間

相關教程