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

 public static class ObjectToXML
{
private static readonly Type[] WriteTypes = new[] {
typeof(string), typeof(DateTime),typeof(decimal), typeof(Guid),
};
public static bool IsSimpleType(this Type type)
{
return type.IsPrimitive || WriteTypes.Contains(type) || type.IsEnum;
}
public static XElement ToXml(this object input)
{
return input.ToXml(null);
} private static string GetXMLElementAttributeName(PropertyInfo info)
{
string attributeName = ""; var attr = info.GetCustomAttributes(true);
if (attr != null && attr.Length > )
{ foreach (var item in attr)
{
if (item is XmlElementAttribute)
{
var temp = item as XmlElementAttribute;
attributeName = temp.ElementName; }
else if(item is XmlRootAttribute)
{
var temp = item as XmlRootAttribute;
attributeName = temp.ElementName;
}
}
}
return attributeName;
} private static object GetPropertyValue(object input, PropertyInfo info)
{
if (info.PropertyType.IsEnum)
{
return (int)info.GetValue(input);
}
return info.GetValue(input);
} public static XElement ToXml(this object input, string element)
{
if (input == null)
return null; if (string.IsNullOrEmpty(element))
element = "object"; element = XmlConvert.EncodeName(element);
var ret = new XElement(element); if (input != null)
{
var type = input.GetType();
var props = type.GetProperties();
var elements = from prop in props
let name = XmlConvert.EncodeName(GetXMLElementAttributeName(prop) == "" ? prop.Name : GetXMLElementAttributeName(prop))
let val = GetPropertyValue(input,prop)
let value = prop.PropertyType.IsSimpleType()
? new XElement(name, val)
: val.ToXml(name)
where value != null
select value; ret.Add(elements);
} return ret;
}
}

调用:

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

记得引入命名空间

C# 对象转XML 支持匿名类的更多相关文章

  1. JSON对象与XML相互转换工具类

    依赖jar <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId ...

  2. java对象与xml相互转换工具类

    public class XmlHelper { /** * Object转XML * * @param object * @return * @throws Exception */ public ...

  3. 微信开发,对象转换为xml时候引用XStream这个类报错处理方案

    报错的信息为:The type org.xmlpull.v1.XmlPullParser cannot be resolved. /**  * 扩展XStream 支持CDATA  */ privat ...

  4. c# 把一个匿名对象赋值给一个Object类型的变量后,怎么取这个变量? c# dynamic动态类型和匿名类 详解C# 匿名对象(匿名类型)、var、动态类型 dynamic 深入浅析C#中的var和dynamic

    比如有一个匿名对象,var  result =......Select( a=>new {  id=a.id, name=a.name});然后Object  obj =  result ;我怎 ...

  5. java匿名类和匿名对象及this的其他用法

    /* 匿名内部类:就是内部类的简写格式. 必须前提:内部类必须继承或者实现一个类或者接口. 匿名内部类其实就是一个匿名 子类对象. 格式:new 父类对象 or 接口(){ 子类内容:(覆盖父类的, ...

  6. c#匿名类,匿名对象

    何谓匿名类,其实本质和普通定义的类一样,只不过是由系统的编译器来完成的,首先举个例子. 一般情况 //声明一个类,包含贴别多的字段 public class Person() { public str ...

  7. BX2001: IE 支持使用 window.clipboardData 访问系统剪贴板,Chrome 和 Safari 中存在类似的 Clipboard 对象但尚未实现,Firefox 和 Opera 不支持这类对象

    http://www.w3help.org/zh-cn/causes/BX2001 标准参考 无 问题描述 IE 支持使用 window.clipboardData 对象内的一系列方法访问系统剪贴板: ...

  8. Java对象转xml报文和xml报文转Java对象帮助类

    import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marsha ...

  9. C# 3.0 / C# 3.5 对象集合初始化器、匿名类

    对象集合初始化器 在 .NET 2.0 中构造一个对象的方法一是提供一个重载的构造函数,二是用默认的构造函数生成一个对象,然后对其属性进行赋值. 在 .NET 3.5/C# 3.0 中,我们有一种更好 ...

随机推荐

  1. C++ Crypto++ RSA加密资料收集

    C++利用Crypto++,vs2005环境下的RSA应用 基于Crypto++/Cryptopp的rsa密钥生成,rsa加密.解密,rsa签名.验签 Keys and Formats 使用Crypt ...

  2. HttpURLConnection 返回汉字乱码(全是问号)

    public static String doPost(String urlStr, Map<String, Object> paramMap) throws Exception { UR ...

  3. sqlserver 误删数据库恢复

    本文为转载 原文:https://blog.csdn.net/xwnxwn/article/details/53537841 由于长时间从事企业应用系统开发,前往用户现场升级.调试系统是比较常做的事情 ...

  4. RNA-Seq数据去接头(Adapter)

    1.adapter是一段短的序列已知的核酸链,用于链接序列未知的目标测序片段. 2.barcode,也称为index,是一段很短的寡居核酸链,用于在多个样品混合测序时,标记不同的样品. 3.inser ...

  5. Makefile 中@是什么意思

    http://bbs.chinaunix.net/thread-1916415-1-1.html linux源码的顶级Makefile中有这么一句 $(filter-out _all sub-make ...

  6. HQL和SQL查询

     转自http://blog.csdn.net/aaa1117a8w5s6d/article/details/7757097 HQL和SQL的区别 标签: sqlhibernatejavasessio ...

  7. mysql 5.7 修改密码

    mysql 5.7 ,user表就没有password 这个字段了. ') where user='root' and host='localhost'; 这样当然就改不了密码了. ') where ...

  8. 832. Flipping an Image

    class Solution { public: vector<vector<int>> flipAndInvertImage(vector<vector<int& ...

  9. Linux关机操作

    正确的关机流程为:sync > shutdown > reboot > halt 关机指令为:shutdown ,你可以man shutdown 来看一下帮助文档. 例如你可以运行如 ...

  10. jQuery Growl插件(消息提醒)

    ps:菜鸟教程 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <s ...