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. langchain0.3教程:聊天机器人进阶之方法调用

    我们思考一个问题:大语言模型是否能帮我们做更多的事情,比如帮我们发送邮件.默认情况下让大模型帮我们发送邮件,大模型会这样回复我们: 可以看到,大模型无法发送邮件,它只会帮我们生成一个邮件模板,然后让我 ...

  2. 能详细地讲讲stm32该怎么学吗?

    作为一个在嵌入式领域摸爬滚打了好几年的老兵,我想分享一下我学习STM32的心路历程和方法论.坦白说,刚开始接触STM32时,我也是一脸懵逼.机械专业毕业的我转行做嵌入式,第一份工作被调剂到电子部门,实 ...

  3. WinDebug查看C#程序运行内存中的数据库连接字符串

    真巧,昨天刷到了大佬"一线码农"的视频,大概就是讲的有人找他破解一个混淆加密的数据库连接字符串,然后大佬也提供了方案就是用WinDebug查看内存中的数据.这其实本质上就是一个用W ...

  4. sql学习day2——运用case进行有条件的update(续day1)

    1.薪水表,如下所示,要求:为下一年调整工资22000以下的员工涨工资10%,24000以上的员工减少10% 思考:如果先update薪水24000以上的员工,假设某工资为24000,24000*(1 ...

  5. C# 基础——CLR、托管代码及非托管代码

    C# 基础--CLR.托管代码及非托管代码 应用程序的类型 使用.net的编程语言(C#.F#.VB)创建的应用程序,都会被编译器编译成中间语言IL语言,在CLR(公共语言运行时)中运行. 比如:控制 ...

  6. SpringBoot配置@ConfigurationProperties(prefix = "pig")时中文乱码

    问题出现 通过@ConfigurationProperties(prefix = "pig")注解进行属性绑定的时候,application.properties文件中出现中文,从 ...

  7. 【HUST】网安纳米|2023年研究生纳米技术考试参考

    目录 1 纳米材料是什么 2 纳米材料的结构特性 3 纳米结构的其他特性 4 纳米结构的检测技术 5 纳米材料的应用 打印建议:PPT彩印(这样重点比较突出),每面12张PPT,简单做一下关键词目录, ...

  8. Web前端入门第 46 问:CSS 中的数学函数不要只会 calc

    数学函数可以用来做什么? 最基础的当然是用来进行四则运算了,再进一步可以用来平方,对数,幂,绝对值,取余等,当然还可以用来计算三角函数. CSS 中的数学函数 灵活运用 CSS 中的数学函数,可以抛弃 ...

  9. Opencv与Pillow图片操作差异对深度学习的影响

    目前在使用Pytorch训练的深度学习模型算法,大部分由于pillow与torchvision中transforms的优异兼容都会采用Image.open from pillow的方式进行图像数据的读 ...

  10. Nacos源码—9.Nacos升级gRPC分析四

    大纲 10.gRPC客户端初始化分析 11.gRPC客户端的心跳机制(健康检查) 12.gRPC服务端如何处理客户端的建立连接请求 13.gRPC服务端如何映射各种请求与对应的Handler处理类 1 ...