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>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2018-03-06 C#用Linq查询Combox的数据源