Order.OrderRequest m = new Order.OrderRequest();
            m.Request = new Order.OrderRequest.RequestModel();
            m.Request.service = "123";
            m.Request.lang = "zzz";
            m.Head = "ssss";
            m.Body = new Order.OrderRequest.BodyModel();
            m.Body.Order = new Order.OrderRequest.BodyModel.OrderModel();
            m.Body.Order.orderid = "232323";
            m.Cargo = new List<Order.OrderRequest.CargoModel>();
            m.Cargo.Add(new Order.OrderRequest.CargoModel() { nameDDD = "123123" });
            m.Cargo.Add(new Order.OrderRequest.CargoModel() { nameDDD = "123123" });

StringBuilder str = new StringBuilder();
            ModelRecurveToXML(m, str);

//方法

public static StringBuilder ModelRecurveToXML<T>(T model, StringBuilder builder)
        {
            StringBuilder builder3 = new StringBuilder();

            foreach (System.Reflection.PropertyInfo pro in model.GetType().GetProperties())
            {
                if (pro.PropertyType.IsPrimitive || pro.PropertyType.IsSealed)
                {
                    builder.Append(string.Format("<{0}>{1}<{2}>", pro.Name, pro.GetValue(model, null), pro.Name));

                }
                else
                {
                    var IsGenericType = pro.PropertyType.IsGenericType;
                    var list = pro.PropertyType.GetInterface("IEnumerable", false);
                    if (IsGenericType && list != null)
                    {
                        builder.Append(string.Format("<{0}", pro.Name));
                        var listVal = pro.GetValue(model, null) as IEnumerable<object>;
                        if (listVal == null) continue;
                        StringBuilder listBuilder = new StringBuilder();
                       
                        foreach (var aa in listVal)
                        {
                            var dtype = aa.GetType();
                            foreach (var bb in dtype.GetProperties())
                            {
                                listBuilder.Append(string.Format(" {0}={1}", bb.Name, bb.GetValue(aa, null)));
                            }
                        }
                        builder.Append(string.Format("{0}></{1}>", listBuilder, pro.Name));
                    }
                    else
                    {
                        builder3.Insert(0, string.Format("</{0}>", pro.Name));
                        builder.Append(string.Format("<{0}", pro.Name));
                        StringBuilder builder2 = new StringBuilder();
                        foreach (var item in pro.GetValue(model, null).GetType().GetProperties())
                        {

                            if (item.PropertyType.IsPrimitive || item.PropertyType.IsSealed)
                            {
                                builder2.Append(string.Format(" {0}={1}", item.Name, item.GetValue(pro.GetValue(model, null), null)));
                            }
                            else
                            {
                                builder.Append(string.Format(">"));
                                builder3.Insert(0, string.Format("</{0}>", item.Name));
                                builder.Append(string.Format("<{0}", item.Name));
                                var data2 = item.GetValue(pro.GetValue(model, null), null);
                                foreach (var item2 in data2.GetType().GetProperties())
                                {
                                    if (item2.PropertyType.IsPrimitive || item2.PropertyType.IsSealed)
                                    {
                                        builder2.Append(string.Format(" {0}={1}", item2.Name, item2.GetValue(data2, null)));
                                    }
                                    else
                                    {
                                        builder3.Insert(0, string.Format("</{0}>", item2.Name));
                                    }

                                }
                            }
                        }
                        builder.Append(string.Format("{0}>", builder2.ToString()));
                    }

                    
                }
            }
            builder.Append(builder3);
            return builder;
        }

//模型

public class Order
        {

            public class OrderRequest
            {
                public RequestModel Request { get; set; }
                public class RequestModel
                {
                    public string service { get; set; }
                    public string lang { get; set; }
                }

                public string Head { get; set; }
                public BodyModel Body { get; set; }
                public class BodyModel
                {
                    public OrderModel Order { get; set; }
                    public class OrderModel
                    {
                        public string orderid { get; set; }
                    }
                }
                public List<CargoModel> Cargo { get; set; }
                public class CargoModel
                {
                    public string nameDDD { get; set; }
                }
            }
        }

生成

<Request service=123 lang=zzz><Head>ssss<Head><Body><Order orderid=232323><Cargo nameDDD=123123 nameDDD=123123></Cargo></Order></Body></Request>

C# 通过反射 Model 转 XML的更多相关文章

  1. MyBatis 逆向工程——根据数据表自动生成model、xml映射文件、mapper接口

    MyBatis Generator(MBG)的使用 MBG可以根据数据表生成对应的model.xml映射文件.mapper接口,只是简单的生成,还需要根据需求修改. 1.下载jar包 https:// ...

  2. MyBatis model、xml、mapper 自动生成,附源码

    Mybatis 代码自动生成 model.xml.mapper 代码结构图 代码地址 https://github.com/shootercheng/codegen 需要修改的地方见 readme

  3. 通过反射来读取XML格式的ControlTemplate

    在之前的一个WPF项目中,由于设置控件模板在前台xaml中读取失败,由此想到了通过反射的形式来读取该模板,首先将该模板写入一个xml文件中,然后再读取该xml文件,在这里首先介绍一下:资源和嵌入式资源 ...

  4. java---解析XML文件,通过反射动态将XML内容封装到一个类中

    本博客讲的XML解析,使用的是dom4j. 首先建立一个maven项目,在dom.xml中引入相应的dom4j的版本.作者下载的是热度很高的1.6.1版本.maven的使用在这里不做详细讲解. 引入成 ...

  5. json/xml processing model与xml和json的简要区别

    1.JavaScript Object Notation(JSON) JSON是一种轻量级数据交换格式,广泛用作通用格式,用于序列化和反序列化通过Internet相互通信的应用程序中的数据.这些应用程 ...

  6. 使用Dom4j、反射自定义实现xml与java对象互转

    一.前言 国庆假期临近,工作动力不强.所以写几篇之前项目中自己用到的一些可能有用的东西分享出来. 今天分享的是Xml与javaBean互转的自定义实现. 先说几种我知道的Xml与javaBean互转的 ...

  7. 利用Java反射机制完成XML到对象的解析

    对于一些小批量的数据,如果采用数据库来存取的话,未免有点大题小作,使用XML文件是个不错的方法,尤其是在一些Web应用中,经常需要缓存一部分数据,如果将这些数据形成XML文件,解析后放入一个Hasht ...

  8. 使用反射机制恢复xml文件表示的对象

    完成如下功能:1)有一个(任意)对象,里面有N个properties以及getter和setter方法2)有一个properties文件,有N个key,value来描述对象中property的值3)有 ...

  9. java与c#的反射性能比较

    java与c#都支持反射,但是从网络上搜索两大阵营对于反射的态度,基本上.net开发人员都建议慎用反射,因为会有性能开销:反到是java阵营里好象在大量肆无忌惮的使用反射.于是写了下面的测试代码: c ...

  10. xml解析模块

    XML XML是可扩展标记语言的缩写,是实现不同语言或程序之间进行数据交换的协议,主要可以对key添加属性. 页面做展示(字符类型的一个xml格式数据)\做配置文件(内部xml格式的数据).,每一个节 ...

随机推荐

  1. PG的子查询:insert 没有就插入记录,update有则更新记录

    insert into t --进行插入 values(1,'name') ON CONFLICT(id) --如果id这个键存在 do update set --更新以下字段 name=EXCLUD ...

  2. 【电子DIY神器】通吃各种5线步进电机!I2C接口控制28BYJ-48五线四相步进电机

    总线单极性步进电机驱动板 摘要 总线单极性步进电机扩展板采用紧凑型设计,兼容XIAO系列主控板直连或独立使用,支持级联16个模块.板载ULN2003达林顿管驱动芯片(单通道500mA/整片2.5A), ...

  3. Python 迭代器和生成器概念

    目录 迭代器的介绍 自定义迭代器 省略的迭代器 生产器的介绍 yield的普通用法 yield的高级用法 yidle的实际应用案例 总结 迭代器的介绍 迭代器的定义: 迭代器(Iterator)是 P ...

  4. python之random函数,随机取值

    如 a =['辣椒炒肉','红烧肉','剁椒鱼头','酸辣土豆丝','芹菜香干'] 需要从a数组中随机取出一个值打印出来 具体脚本 import random a =['辣椒炒肉','红烧肉','剁椒 ...

  5. python,下载图片到本地自定文件夹内的方法

    比如,我们需要下载下面这张图,图片的网络地址:"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000 ...

  6. CentOS7搭建XSS平台

    我的服务器是CentOS7.8 1.安装php 7 CentOS7的默认PHP版本是PHP5,但是如果我们要安装PHP7,不需要将现有的PHP5删除,只要将PHP升级到PHP7即可. 使用 yum p ...

  7. Web前端入门第 45 问:CSS 变量 var() 轻松实现主题换肤功能

    HELLO,这里是大熊的前端开发笔记. 曾经主题切换功能可以作为软件中亮眼的卖点存在,毕竟那时候要实现换肤可不容易,一套主题一套样式,这代码的重复率嗖嗖嗖的就涨上去了~~当然也可以借助 CSS 预编译 ...

  8. 掌握Node.js原理,开启异步编程之旅

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  9. 网络编程:反应堆_I/O模型和多线程模型实现

    多线程设计的几个考虑 在反应堆reactor框架设计中,main reactor线程是一个acceptor线程,这个线程一旦创建,会以event_loop形式阻塞在event_dispatcher的d ...

  10. Sqlite3中的Join

    1.概述sqlite3是一种轻便的数据库,由DDL(Data defination language),DML(Data manipulation language),TCL(Transaction ...