C# 通过反射 Model 转 XML
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的更多相关文章
- MyBatis 逆向工程——根据数据表自动生成model、xml映射文件、mapper接口
MyBatis Generator(MBG)的使用 MBG可以根据数据表生成对应的model.xml映射文件.mapper接口,只是简单的生成,还需要根据需求修改. 1.下载jar包 https:// ...
- MyBatis model、xml、mapper 自动生成,附源码
Mybatis 代码自动生成 model.xml.mapper 代码结构图 代码地址 https://github.com/shootercheng/codegen 需要修改的地方见 readme
- 通过反射来读取XML格式的ControlTemplate
在之前的一个WPF项目中,由于设置控件模板在前台xaml中读取失败,由此想到了通过反射的形式来读取该模板,首先将该模板写入一个xml文件中,然后再读取该xml文件,在这里首先介绍一下:资源和嵌入式资源 ...
- java---解析XML文件,通过反射动态将XML内容封装到一个类中
本博客讲的XML解析,使用的是dom4j. 首先建立一个maven项目,在dom.xml中引入相应的dom4j的版本.作者下载的是热度很高的1.6.1版本.maven的使用在这里不做详细讲解. 引入成 ...
- json/xml processing model与xml和json的简要区别
1.JavaScript Object Notation(JSON) JSON是一种轻量级数据交换格式,广泛用作通用格式,用于序列化和反序列化通过Internet相互通信的应用程序中的数据.这些应用程 ...
- 使用Dom4j、反射自定义实现xml与java对象互转
一.前言 国庆假期临近,工作动力不强.所以写几篇之前项目中自己用到的一些可能有用的东西分享出来. 今天分享的是Xml与javaBean互转的自定义实现. 先说几种我知道的Xml与javaBean互转的 ...
- 利用Java反射机制完成XML到对象的解析
对于一些小批量的数据,如果采用数据库来存取的话,未免有点大题小作,使用XML文件是个不错的方法,尤其是在一些Web应用中,经常需要缓存一部分数据,如果将这些数据形成XML文件,解析后放入一个Hasht ...
- 使用反射机制恢复xml文件表示的对象
完成如下功能:1)有一个(任意)对象,里面有N个properties以及getter和setter方法2)有一个properties文件,有N个key,value来描述对象中property的值3)有 ...
- java与c#的反射性能比较
java与c#都支持反射,但是从网络上搜索两大阵营对于反射的态度,基本上.net开发人员都建议慎用反射,因为会有性能开销:反到是java阵营里好象在大量肆无忌惮的使用反射.于是写了下面的测试代码: c ...
- xml解析模块
XML XML是可扩展标记语言的缩写,是实现不同语言或程序之间进行数据交换的协议,主要可以对key添加属性. 页面做展示(字符类型的一个xml格式数据)\做配置文件(内部xml格式的数据).,每一个节 ...
随机推荐
- PG的子查询:insert 没有就插入记录,update有则更新记录
insert into t --进行插入 values(1,'name') ON CONFLICT(id) --如果id这个键存在 do update set --更新以下字段 name=EXCLUD ...
- 【电子DIY神器】通吃各种5线步进电机!I2C接口控制28BYJ-48五线四相步进电机
总线单极性步进电机驱动板 摘要 总线单极性步进电机扩展板采用紧凑型设计,兼容XIAO系列主控板直连或独立使用,支持级联16个模块.板载ULN2003达林顿管驱动芯片(单通道500mA/整片2.5A), ...
- Python 迭代器和生成器概念
目录 迭代器的介绍 自定义迭代器 省略的迭代器 生产器的介绍 yield的普通用法 yield的高级用法 yidle的实际应用案例 总结 迭代器的介绍 迭代器的定义: 迭代器(Iterator)是 P ...
- python之random函数,随机取值
如 a =['辣椒炒肉','红烧肉','剁椒鱼头','酸辣土豆丝','芹菜香干'] 需要从a数组中随机取出一个值打印出来 具体脚本 import random a =['辣椒炒肉','红烧肉','剁椒 ...
- python,下载图片到本地自定文件夹内的方法
比如,我们需要下载下面这张图,图片的网络地址:"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000 ...
- CentOS7搭建XSS平台
我的服务器是CentOS7.8 1.安装php 7 CentOS7的默认PHP版本是PHP5,但是如果我们要安装PHP7,不需要将现有的PHP5删除,只要将PHP升级到PHP7即可. 使用 yum p ...
- Web前端入门第 45 问:CSS 变量 var() 轻松实现主题换肤功能
HELLO,这里是大熊的前端开发笔记. 曾经主题切换功能可以作为软件中亮眼的卖点存在,毕竟那时候要实现换肤可不容易,一套主题一套样式,这代码的重复率嗖嗖嗖的就涨上去了~~当然也可以借助 CSS 预编译 ...
- 掌握Node.js原理,开启异步编程之旅
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- 网络编程:反应堆_I/O模型和多线程模型实现
多线程设计的几个考虑 在反应堆reactor框架设计中,main reactor线程是一个acceptor线程,这个线程一旦创建,会以event_loop形式阻塞在event_dispatcher的d ...
- Sqlite3中的Join
1.概述sqlite3是一种轻便的数据库,由DDL(Data defination language),DML(Data manipulation language),TCL(Transaction ...