public sealed class XMLSerilizable
{
/// <summary>
/// XML转换为对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="xml"></param>
/// <returns></returns>
public static T XMLToObject<T>(string xml) where T : new()
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
XmlNode root = doc.FirstChild; Dictionary<string, object> table = new Dictionary<string, object>();
foreach (XmlNode v in root.ChildNodes)
{
table.Add(v.Name, GetValue(v));
} return DicToObject<T>(table); //new RequestText(table);
} /// <summary>
/// 字典类型转化为对象
/// </summary>
/// <param name="dic"></param>
/// <returns></returns>
private static T DicToObject<T>(Dictionary<string, object> dic) where T : new()
{
var md = new T();
DicToObject(md, dic);
return md;
} /// <summary>
/// Dictionary填充对象
/// </summary>
/// <param name="md"></param>
/// <param name="dic"></param>
private static void DicToObject(object md, System.Collections.IDictionary dic)
{
foreach (var filed in dic.Keys)
{
BindingFlags flag = BindingFlags.Public | BindingFlags.IgnoreCase | BindingFlags.Instance; try
{
var value = dic[filed]; if (value is System.Collections.IDictionary)
{
Type ct = md.GetType().GetProperty(filed + "", flag).PropertyType;
object o = Activator.CreateInstance(ct);
DicToObject(o, value as System.Collections.IDictionary);
md.GetType().GetProperty(filed + "", flag).SetValue(md, o, null);
}
else
md.GetType().GetProperty(filed + "", flag).SetValue(md, value, null);
}
catch (Exception e)
{ }
}
// return md;
} /// <summary>
/// 获得节点值
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
private static object GetValue(XmlNode node)
{
if (node.HasChildNodes)
{
// <MsgType><![CDATA[text]]></MsgType> 这种结构 node.ChildNodes.Count==1
if (node.ChildNodes.Count == && node.ChildNodes[].NodeType != XmlNodeType.Element)
{
return node.InnerText;
}
else
{
Dictionary<string, object> table = new Dictionary<string, object>();
foreach (XmlNode n in node.ChildNodes)
{
table.Add(n.Name, GetValue(n));
}
return table;
}
}
return node.InnerText;
} }

xml转换为对象 微信接口的更多相关文章

  1. XML转换为对象操作类详解

    //XML转换为对象操作类 //一,XML与Object转换类 using System.IO; using System.Runtime.Serialization.Formatters.Binar ...

  2. XML转换为对象/Javabean

    將XML轉換為對象 /** * xml转换成JavaBean * @param xml * @param c * @return */ public static <T> T conver ...

  3. ASP.NET WEB API微信支付通知接口,返回xml数据,微信服务器不识别问题

    原文:ASP.NET WEB API微信支付通知接口,返回xml数据,微信服务器不识别问题 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/MrTra ...

  4. C#开发微信门户及应用(42)--使用Autofac实现微信接口处理的控制反转处理

    在很多情况下,我们利用IOC控制反转可以很方便实现一些接口的适配处理,可以在需要的时候切换不同的接口实现,使用这种方式在调用的时候,只需要知道相应的接口接口,具体调用哪个实现类,可以在配置文件中动态指 ...

  5. dom4j微信接口开发

    新建一个web项目,我用的是eclipse和tomcat7.0 ,外网环境用的nat123 先建立一个实体bean:TextMessage /** * xml基本对象 * @author xiaohu ...

  6. XML转换为Map通用算法实现 Java版本(Stax实现)

    目前项目中需要将XML转换为Map,下面给出了自己的代码实现. 后续将为大家提供Dom版本的实现. 请各路大神给予各种优良实现. 场景: 在项目中需要解析XML文本字符串,需要将XML文本字符串映射为 ...

  7. Django:之中间件、微信接口和单元测试

    Django中间件 我们从浏览器发出一个请求 Request,得到一个响应后的内容 HttpResponse ,这个请求传递到 Django的过程如下: 也就是说,每一个请求都是先通过中间件中的 pr ...

  8. python实现微信接口(itchat)

    python实现微信接口(itchat) 安装 sudo pip install itchat 登录 itchat.auto_login() 这种方法将会通过微信扫描二维码登录,但是这种登录的方式确实 ...

  9. python实现微信接口——itchat模块

    python实现微信接口——itchat模块 安装 sudo pip install itchat 登录 itchat.auto_login()  这种方法将会通过微信扫描二维码登录,但是这种登录的方 ...

随机推荐

  1. Git使用技巧(3)-- 远程操作

    Git远程操作详解 作者: 阮一峰 编辑更新:shifu204 日期: 2016年9月1日 Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操 ...

  2. Linux gcc编译器

    GNU CC(通常称为GCC)是GNU项目的编译器,他能够编译C.C++语言编写的程序. 使用gcc,程序员可以对编译过程有更多控制,编译过程分为3个阶段. --预处理 --汇编 --链接 程序员可以 ...

  3. oracle 启动模式

    转载自:http://blog.csdn.net/nsj820/article/details/6573525 <一>.ORACLE数据库启动模式 1.启动SQL*PLUS不与数据库连接 ...

  4. MEF基础概念学习笔记

    MEF,是微软.net框架下的一个框架类库.可以使你的程序低耦合的加载扩展.在开发插件,或者开发一些需要灵活扩展的功能的时候经常用到.例如微软给出的计算器的例子.当你开发计算器的时候,初始功能只提供了 ...

  5. 一套一般般的前端框架 layui

    http://www.layui.com/doc/

  6. php中使用curl来post一段json数据

    场景:在调用第三方接口时经常需要使用到curl进行数据交互,在初次使用时遇到一些小问题,记录下来随时查阅. 封装curl相关方法便于使用,方法如下: /** * @param $url * @para ...

  7. Map的两张遍历方法 keySet(),entrySet()

    源博客 http://blog.csdn.net/liu826710/article/details/9001254 在Map集合中 values():方法是获取集合中的所有的值----没有键,没有对 ...

  8. ThinkPHP部分内置函数

    D.F.S.C.L.A.I 他们都在functions.php这个文件家下面我分别说明一下他们的功能 D() 加载Model类M() 加载Model类 A() 加载Action类L() 获取语言定义C ...

  9. 【转】10 个MySQL数据库备份教程推荐

    10 个MySQL数据库备份教程推荐 MySQL是动态网站开发中最著名的开源数据库系统.如果你在网站中使用了MySQL,那么你应该定期备份你的数据以防止它丢失. 本文将介绍自动或手动备份MySQL数据 ...

  10. poj3159

    Candies Time Limit: 1500MS   Memory Limit: 131072K Total Submissions: 28133   Accepted: 7766 Descrip ...