一、前言

由于有时候返回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节点顺序由我控制的更多相关文章

  1. Hibernate实体映射配置(XML)简单三步完美配置

    我们在使用Hibernate框架的时候,非常纠结的地方就是实体和表之间的映射,今天借助汤老师的思路写了小教程,以后配置不用纠结了! 第一步:写注释 格式为:?属性,表达的是本对象与?的?关系. 例:“ ...

  2. xml文件生成方式一(字符串拼接,将多实体类对象写入xml文件)

    1.xml文件生成,拼接字符串使用StringBuffer或StringBuilder 2.拼接好后写入文件即可,将多个实体类写入xml文件 3.这种方式比较简单,但是操作也比较麻烦 4.下面是我的代 ...

  3. 实体转XML XML转实体

    // <summary> /// 实体类序列化成xml /// </summary> /// <param name="enitities">实 ...

  4. 2.6 XML配置:XML文件节点说明

    来源:http://blog.csdn.net/five3/article/details/25907693 TestNG的DTD检查文件:http://testng.org/testng-1.0.d ...

  5. TreeView 读取 xml 显示节点

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Tree2_xml.aspx.c ...

  6. Power Designer导出实体类和NHibernate xml文件

    Power Designer导出实体类和NHibernate xml文件 今天研究了一下通过PowerDesigner生成实体类和NHibernate所需要的xml文件,方法是通过Power Desi ...

  7. 递归遍历所有xml的节点及子节点

    import java.io.File; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; i ...

  8. C# Xml.Serialization 节点重命名

    XmlElement 节点重命名 XmlRoot 根节点重名称 XmlArray List集合添加根节点 XmlArrayItem List集合中子节点重命名 [Serializable] 将该类标记 ...

  9. VB 老旧版本维护系列---读取xml某个节点的值

    读取xml某个节点的值 '定义xml字符串内容地址 Dim xmlFileStr As String = "" '定义所需读取节点的名称 Dim readNodeName As S ...

随机推荐

  1. DOM不同的结点类型

    1)node类型 nodeName(what node) and nodeValue(always null) node父子之间可以用childNodes来表示 firstChild,childNod ...

  2. 理解jquery的.on()方法

    jquery在的.on()方法用来给元素绑定事件处理函数的,我经常用在两个地方: 给未来的元素绑定事件:我总是这样用:$(document).on('click','#div1',function() ...

  3. python文件_读取

    1.文件的读取和显示 方法1: f=open(r'G:\2.txt') print f.read() f.close() 方法2: try: t=open(r'G:\2.txt') print t.r ...

  4. RF学习过程中遇到的问题

    1.写了一个打开浏览器的用例,执行用例时报需要对应的浏览器驱动,此时应下载对应的浏览器驱动,把该执行文件放到python的安装根目录下,再执行用例就成功了 2.日志不见的问题:需要杀进程

  5. Ubuntu常用命令速查手册-珍藏版-完整版

    sudo apt-get install 软件名 安装软件命令 sudo nautilus 打开文件(有root权限) su root 切换到“root” ls 列出当前目录文件(不包括隐含文件) l ...

  6. Hunt the Wumpus第二个版本---多怪兽,多洞穴,洞穴间双向互通

    其中,将洞穴连起来的算法要好好体会. 学习构建临时变量列表,确认循环用FOR,非确定循环用 WHILE,并定好退出条件. from random import choice cave_numbers ...

  7. Resty 一款极简的restful轻量级的web框架

    https://github.com/Dreampie/Resty Resty 一款极简的restful轻量级的web框架 开发文档 如果你还不是很了解restful,或者认为restful只是一种规 ...

  8. BZOJ1662: [Usaco2006 Nov]Round Numbers

    1662: [Usaco2006 Nov]Round Numbers Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 147  Solved: 84[Sub ...

  9. Linux企业级项目实践之网络爬虫(11)——处理http请求头

    http请求头,HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者POST).如有必要,客户程序还可以选择发送其他的请求头.HTTP客户程序(例如浏览器),向服务 ...

  10. 2015第19周四jquery版本

    今天用到一个jquery插件,发现最新版需要jquery2.0以上版本才行,而目前项目在用的版本是1.8.3,自然无法使用,刚看了jquery的主要版本和差异,直接百度搜索无满意结果,最后在百科中给出 ...