将实体转成XML,XML节点顺序由我控制
一、前言
由于有时候返回xml格式比较严格,需要按照一定的顺序排列节点才能够符合要求,这里主要用到了自定义一个List<string> 字符顺序,再让实体属性按照List定义好的顺序重新排列实体属性集合,在用 foreach遍历实体属性集合的时候方便操作拼接XML元素。
二、新建一个控制台程序做测试就好了
1.定义三个类
public class Person { public string Name{get;set;} public string Sex { get; set; } public int Age { get; set; } public string Address { get; set; } public string Province { get; set; } } public class Father { public string Name { get; set; } public string Sex { get; set; } public int Age { get; set; } public Son Son { get; set; } } public class Son { public string SonName { get; set; } public int SonAge { get; set; } }
2.定义一个将实体转成XDocument的方法
static XDocument ChangeToXDocument<T>(T entity) where T : class,new() //加约束 { entity = entity ?? new T(); XDocument doc = new XDocument(); doc.Add(new XElement("xml")); var root = doc.Root; List<string> list = new List<string> { "Name", "Age", "Sex" }; if (entity is Person) { list.AddRange(new string[] { "Province", "Address" }); //xml文档格式元素节点按照这个顺序填写 } else if (entity is Father) { list.AddRange(new string[] { "Son", "SonName", "SonAge" }); //xml文档格式元素节点按照这个顺序填写 } var proNewList = entity.GetType().GetProperties().OrderBy(p => list.IndexOf(p.Name)).ToList(); //entity实体属性按照list的顺序重新排好了 foreach (var prop in proNewList) { var propName = prop.Name; if (propName == "Son")//说明要有Son节点,因为Son在这里是一个类,所以得再次调用 ChangeToXDocument<T>(T entity)方法 { var sonElement = new XElement("Son"); var son = prop.GetValue(entity, null) ;//获取Son类中的对象了 var subNodes = ChangeToXDocument(son); sonElement.Add(subNodes.Root.Elements());//Son节点添加里面的子节点 root.Add(sonElement);//根节点添加Son节点 } else //其他类型要做处理,可以在这里做判断处理完再加到root上面 { root.Add(new XElement(propName, prop.GetValue(entity, null))); } } return doc; }
3.控制台调用输出
static void Main(string[] args) { Person p = new Person(); p.Name = "校长"; p.Sex = "男"; p.Age = ; p.Address = "长隆长隆"; p.Province = "广东省"; Console.WriteLine("---------------person-----------------"); string str = ChangeToXDocument(p).ToString(); Console.WriteLine(str); Console.WriteLine("---------------father-----------------"); Father f = new Father(); f.Name = "父亲"; f.Age = ; f.Sex = "男"; Son s = new Son(); s.SonName = "儿子"; s.SonAge = ; f.Son = s; string str1 = ChangeToXDocument(f).ToString(); Console.WriteLine(str1); Console.ReadKey(); }
演示结果:
将实体转成XML,XML节点顺序由我控制的更多相关文章
- Hibernate实体映射配置(XML)简单三步完美配置
我们在使用Hibernate框架的时候,非常纠结的地方就是实体和表之间的映射,今天借助汤老师的思路写了小教程,以后配置不用纠结了! 第一步:写注释 格式为:?属性,表达的是本对象与?的?关系. 例:“ ...
- xml文件生成方式一(字符串拼接,将多实体类对象写入xml文件)
1.xml文件生成,拼接字符串使用StringBuffer或StringBuilder 2.拼接好后写入文件即可,将多个实体类写入xml文件 3.这种方式比较简单,但是操作也比较麻烦 4.下面是我的代 ...
- 实体转XML XML转实体
// <summary> /// 实体类序列化成xml /// </summary> /// <param name="enitities">实 ...
- 2.6 XML配置:XML文件节点说明
来源:http://blog.csdn.net/five3/article/details/25907693 TestNG的DTD检查文件:http://testng.org/testng-1.0.d ...
- TreeView 读取 xml 显示节点
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Tree2_xml.aspx.c ...
- Power Designer导出实体类和NHibernate xml文件
Power Designer导出实体类和NHibernate xml文件 今天研究了一下通过PowerDesigner生成实体类和NHibernate所需要的xml文件,方法是通过Power Desi ...
- 递归遍历所有xml的节点及子节点
import java.io.File; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; i ...
- C# Xml.Serialization 节点重命名
XmlElement 节点重命名 XmlRoot 根节点重名称 XmlArray List集合添加根节点 XmlArrayItem List集合中子节点重命名 [Serializable] 将该类标记 ...
- VB 老旧版本维护系列---读取xml某个节点的值
读取xml某个节点的值 '定义xml字符串内容地址 Dim xmlFileStr As String = "" '定义所需读取节点的名称 Dim readNodeName As S ...
随机推荐
- hdu2896
数据水,但是各种wa各种t各种re最后照着别人的改了改发现了毛病 数组做指针传入的时候系统是不知道传入后的数字的长度的如果用memset他就只会讲指针的地方清零 #include<iostrea ...
- (搬运工)推荐!国外程序员整理的 C++ 资源大全
标准库 C++标准库,包括了STL容器,算法和函数等. C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分. Standard Tem ...
- void (*f(int, void (*)(int)))(int) 函数解析
函数指针 今天与几个同学看到了一个函数指针定义: void (*f(int, void (*)(int)))(int) 以前在C trap pit fails里面见过,但是文章里面介绍的很详细,但是往 ...
- 02.Lua的数据类型
简单认识Lua 百度了一下(偷哈懒就不自己写了) Lua 是一个小巧的脚本语言.是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janei ...
- 环形进度条带数字显示(canvas)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Js收藏-转
/** * <P> Title: JavaScript Util </P> * <P> Description: JavaScript 工具 </P> ...
- 批处理更新svn
很多软件都有命令行支持,即可以直接在Windows命令提示符下输入软件提供命令来执行,完成软件的一些功能. 比如输入svn help 可以查看svn支持的命令行 想要更新svn资源需要用到命令svn ...
- Python读取Yaml文件
近期看到好多使用Yaml文件做为配置文件或者数据文件的工程,随即也研究了下,发现Yaml有几个优点:可读性好.和脚本语言的交互性好(确实非常好).使用实现语言的数据类型.有一个一致的数据模型.易于实现 ...
- HDFS操作--文件上传/创建/删除/查询文件信息
1.上传本地文件到HDFS //上传本地文件到HDFS public class CopyFile { public static void main(String[] args) { try { C ...
- Powershell 定义文本
使用引号可以定义字符串,如果想让自己定义的字符串原样输出,可以使用单引号. 1 2 $text='$fei $(tai) $env:windir 飞苔博客 (20+2012)' $text 输出: $ ...