这两天,应要求做一个C/S的小程序,考虑到程序简洁小巧,存数据的方式不使用数据库,而是直接存入XML文档中保存。为了把复杂实体类里面的属性存入XML,我们可以使用C#有的反射机制,做一个简单的通用工具类来实现。(需要设置属性为public)

弱弱的问一句,这种“序列化”的说法是对的吗?如果我说错了记得提醒我一下(⊙v⊙)

我发现我又二货了一把,序列话和反序列化前辈已经写得很好很详细了 Fish Li

实现类代码:

using System;
using System.Reflection;
using System.Xml.Linq; namespace MyTool
{
public static class ObjectToXml
{
public static string Path
{
get { return String.Format(@"{0}/{1}.xml", Environment.CurrentDirectory,DateTime.Now.Day.ToString()); }
}
public static void Intit(object ob)
{
XDocument doc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"),
new XElement("Data")); //建立跟节点 <Data></Data> Process(ob,doc.Element("Data")); doc.Save(Path);
} private static void Process(object ob,XElement doc)
{
XElement data = doc;
string ClassName = ob.GetType().Name; data.Add(new XElement(ClassName));//取类名 添加一个节点 PropertyInfo[] properties = ob.GetType().GetProperties(BindingFlags.Instance |BindingFlags.Public);
foreach (var item in properties)
{
string type = item.GetValue(ob).GetType().Name; if (type.ToLower() == "string" || type.ToLower() == "int32" || type.ToLower() == "double")//判断属性是否是基本类型比如strin int double 若是,则建立节点并赋值
{
XElement ChildNode = data.Element(ClassName);
ChildNode.Add(new XElement(item.Name, item.GetValue(ob)));
}
else //否则,递归运行Process函数
{
Process(item.GetValue(ob), data.Element(ClassName));
}
} }
}
}

使用:

using System;
using MyTool; namespace xmltest
{
class Program
{
static void Main(string[] args)
{ var a = new student
{
Name = "memeda", age = ,gg=1.5,
more=new info
{
boy="nan",
moreinfo=new moreinfo
{
mv="mv"
}
}
};
ObjectToXml.Intit(a); Console.ReadKey();
}
} public class student
{
public string Name { get; set; }
public int age { get; set; } public double gg { get; set; } public info more { get; set; }
} public class info
{
public moreinfo moreinfo { get; set; }
public string boy { get; set; }
} public class moreinfo
{
public string mv { get; set; }
}
}

最后的效果:

C#实体类序列化为XML的更多相关文章

  1. 【C#】使用C#将类序列化为XML

    直接上代码: public static class XmlSerializer { public static void SaveToXml(string filePath, object sour ...

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

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

  3. 序列化为XML

    java类序列化成xml 方法[转] 今天看了下JAVA序列化.还是一知半解.怎么也没有弄明白,怎么序列化成XML文件.处入半解状态.在网上找了很多,大部分是理论上的.没有实际的例子.功夫不负有心人, ...

  4. 匿名对象序列化为XML

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...

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

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

  6. java 使用xom对象数据序列化为xml、反序列化、Preferences相关操作小案例

    package org.rui.io.xml; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import ...

  7. MyBatis从入门到精通:第一章实体类与Mapper.xml文件

    实体类: package tk.mybatis.simple.model; public class Country { public Long getId() { return id; } publ ...

  8. asp.net webapi 序列化为xml 时实体属性增加<![CDATA[]]>防止特殊字符

    有时webapi在序列化xml时,可能需要给某些带有html或特殊字符(如 < > & /)的字段加上<![CDATA[]]> 已防止影响xml正常数据,如果使用.as ...

  9. Java工具类_表结构自动生成对应的实体类、Mapper.xml文件、Dao类

    import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWrit ...

随机推荐

  1. leetcode第一刷_Sudoku Solver

    这道题简直是耻辱啊.竟然被吓得不敢做,最终開始写还犯下了各种低级错误,花了好久的时间. 事实上假设想明确81*9事实上是非常小的规模的话,早就想到用回溯法了,这不是跟八皇后全然一样的嘛.每次填入的时候 ...

  2. prototype 用法

    prototype使得js面向对象使用了prototype之后,使用它里面的属性或者函数 需要new出一个对象才可以使用.否则不使用prototype,直接向对象注入 function Person( ...

  3. Mylyn--谁用谁知道!

    Mylyn――谁用谁知道!http://www.blogjava.net/alwayscy/archive/2008/06/15/208022.html 此文是我之Mylyn初体验,不搞大而全,而只把 ...

  4. AngularJs学习笔记(1)——ng-app

    众所周知: ng-app 指令用于告诉 AngularJS 应用当前这个元素是根元素.所有 AngularJS 应用都必须要要一个根元素. 只有被具有ng-app属性的DOM元素包含的元素才会受ang ...

  5. node.js 学习03

    node.js学习03 解决浏览器接收服务端信息之后乱码的问题: 服务器通过设置http响应报文头,告诉浏览器使用相应的编码 来解析网页. res.setHeader('Content','text/ ...

  6. asp.net core mvc视频A:笔记5-1.路由规则

    方法一:通过MapRoute方法,配置文件位置 小例子:如果所有路径都要在admin下,可以这样写 方法二:通过路由属性 相对路由 现在需要加/admin/home/index才能正常访问原来的默认页 ...

  7. android自定义View&&简单布局&&回调方法

    一.内容描述 根据“慕课网”上的教程,实现一个自定义的View,且该View中使用自定义的属性,同时为该自定义的View定义点击事件的回调方法. 二.定义自定义的属性 在res/valus/ 文件夹下 ...

  8. asp.net mvc 4多级area实现技巧

    今天在工作要实现这个多级area.其原因是这个项目需要多级的功能,大的类别里有小的类别,小的类别里有具体的功能项,每一个功能项还有若干动作Action,所以在菜单和mvc工程的结构上都需要有体现多级的 ...

  9. 执行”spark-shell –master yarn –deploy-mode client”,虚拟内存大小溢出,报错

    在Hadoop 2.7.2集群下执行如下命令: spark-shell  --master yarn --deploy-mode client 爆出下面的错误: org.apache.spark.Sp ...

  10. 【bzoj1875】【SDOI2009】【HH去散步】

    1875: [SDOI2009]HH去散步 Time Limit: 20 Sec Memory Limit: 64 MB Submit: 932 Solved: 424 [Submit][Status ...