最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
VB.net 2010 視頻教程 VB.net 2010 視頻教程 VB.net 2010 視頻教程
SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
當前位置:
首頁 > 編程開發 > c#教程 >
  • C#教程之

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

在網上找了很多關于對象轉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();

記得引入命名空間

pk10赛车冠军技巧
最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
新时时彩走势图163 做贝店多久能赚钱 优酷视频赚钱佣金多少钱 梦幻转区 带什么赚钱 山东11选5任五全天计划 摆摊做什么小吃赚钱 下载重庆时时开奖视频 幸运飞艇平台刘盛客服a 吉林十一选五开奖走势