using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
using System.Runtime.Serialization;
using System.Xml.Serialization;
using System.IO;
using System.Xml;
using System.Web;
namespace ConsoleApplication19
{
[DataContract]
public class Student
{
[DataMember]
public int? stuNo{get;set;}

[DataMember]
public string Name{get;set;}

[DataMember]
public string Sex{get;set;}
[DataMember]
public Decimal Age{get;set;}
}
class Program
{
/// <summary>
/// 在xml中获得实体配置
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static object getXmlInfo(Student obj)
{
XmlSerializer serializer = new XmlSerializer(typeof(Student));
object s;
using (MemoryStream ms = new MemoryStream())
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(("/Config/DefaultFormValue.xml"));
//xmlDoc.Load(@"C:\Users\Hom\Documents\visual studio 2013\Projects\getXml\getXml\student.xml");
XmlNode tempNode = xmlDoc.SelectSingleNode("/Initialization/" + typeof(Student).Name);
if (tempNode != null)
{
XmlDocument tempDoc = new XmlDocument();
XmlDeclaration xmldecl;
xmldecl = tempDoc.CreateXmlDeclaration("1.0", "utf-8", null);
tempDoc.AppendChild(xmldecl);
XmlNode temRoot = tempDoc.CreateElement(typeof(Student).Name);
tempDoc.AppendChild(temRoot);
temRoot.InnerXml = tempNode.InnerXml;
//tempDoc.Save(@"C:\Users\Hom\Documents\visual studio 2013\Projects\getXml\getXml\student1.xml");
tempDoc.Save(ms);
ms.Seek(0, SeekOrigin.Begin);
s = serializer.Deserialize(ms);
}
else
{
s = null;
}
}
return s;
}
/// <summary>
/// 在xml中写入默认配置
/// </summary>
/// <param name="obj"></param>
public static void setXmlInfo(Student obj)
{
XmlSerializer serializer = new XmlSerializer(typeof(Student));
using (MemoryStream ms = new MemoryStream())
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(("DefaultFormValue.xml"));
//xmlDoc.Load(@"C:\Users\Hom\Documents\visual studio 2013\Projects\getXml\getXml\student.xml");
XmlNode tempNode = xmlDoc.SelectSingleNode("/Initialization/" + typeof(Student).Name);
if (tempNode == null)
{
serializer.Serialize(ms, obj);
XmlDocument tempDoc = new XmlDocument();
tempDoc.LoadXml(Encoding.UTF8.GetString(ms.ToArray()));
XmlElement element = xmlDoc.CreateElement(typeof(Student).Name);
element.InnerXml = tempDoc.SelectSingleNode(typeof(Student).Name).InnerXml;
XmlNode root = xmlDoc.SelectSingleNode("Initialization");
root.AppendChild(element);
xmlDoc.Save(("DefaultFormValue.xml"));
//xmlDoc.Save(@"C:\Users\Hom\Documents\visual studio 2013\Projects\getXml\getXml\student.xml");
}
}
}
static void Main(string[] args)
{
Student s = new Student() { stuNo=1, Name="1",Sex="1",Age=1 };
setXmlInfo(s);
Console.ReadKey();
}
}
}

XML(子节点序列化反序列对象)读写的更多相关文章

  1. wp8.1 Study11:APP里文件读写和使用XML和Json序列化

    一.文件读写 1.基本操作(使用FileIO API) 这个方法在上一个stduy已经学过,那么贴出来复习下,代码如下: private async void writeTextToLocalStor ...

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

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

  3. dom4j解析xml获取所有的子节点并放入map中

    dom4j递归解析所有子节点 //解析返回的xml字符串,生成document对象 Document document = DocumentHelper.parseText(resultXml); / ...

  4. 获取$(this)子节点对象的方法

    获取$(this)子节点对象的方法: 1.children()方法: children() 方法返回被选元素的所有直接子元素. 该方法只会向下一级对 DOM 树进行遍历. 2.find()方法: fi ...

  5. C#操作XML学习之创建XML文件的同时新建根节点和子节点(多级子节点)

    最近工作中遇到一个问题,要求创建一个XML文件,在创建的时候要初始化该XML文档,同时该文档打开后是XML形式,但是后缀名不是.在网上找了好些资料没找到,只能自己试着弄了一下,没想到成功了,把它记下来 ...

  6. .NET调用外部接口将得到的List数据,并使用XmlSerializer序列化List对象成XML格式

    BidOpeningData.BidSupervisionSoapClient client = new BidOpeningData.BidSupervisionSoapClient(); Dict ...

  7. 解析xml,返回第一级元素键值对。如果第一级元素有子节点,则此节点的值是子节点的xml数据。

    /** 转换成XML格式字符串 **/ public static String doXMLStr(Map<String, String> map) { StringBuffer xml_ ...

  8. xml去除指定节点,保留子节点操作

    现有xml文件: <?xml version="1.0" encoding="utf-8" ?> <ShiftConfig xmlns:xsi ...

  9. 解析xml节点属性及子节点内容

    xml样例 <microNearlyThreeYearsOverdueInfo subReportType="13204" subReportTypeCost="9 ...

随机推荐

  1. java的RTTI和反射机制

    RTTI,即Run-Time Type Identification,运行时类型识别.RTTI能在运行时就能够自动识别每个编译时已知的类型. 很多时候需要进行向上转型,比如Base类派生出Derive ...

  2. GOF23设计模式之命令模式(command)

    一.命令模式概述 将一个请求封装到一个对象,从而使得可用不同的请求对客户进行参数化. 二.命令模式结构 (1)Command 抽象命令类 (2)ConcreteCommand 具体命令类 (3)Inv ...

  3. 【JS】手机屏幕旋转判断

    function readDeviceOrientation() { if (Math.abs(window.orientation) === 90) { // Landscape alert('横屏 ...

  4. 架构-架构风格:RESTful

    ylbtech-架构-架构风格:RESTful 一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层 ...

  5. common-lang3-version.jar 提供java.lang的扩展功能

    Apache Commons Lang 3.6 API

  6. linux下echo命令详解

    linux的echo命令, 在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的, 因此有必要了解下echo的用法 例如: echo $JAVA_HOME /export/se ...

  7. 缺乏libaio包导致报The server quit without updating PID file

    背景: 直接解压安装mysql5.7.18,解压mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz,直接拷贝另外一台数据库的数据目录,启动mysql过程无日志输出,报E ...

  8. 20181104_C#线程之Thread_ThreadPool_使用Thread实现回到和带参数的回调

    C#   .net  Framework多线程演变路径: 1.0    1.1 时代使用Thread 2.0    时代使用ThreadPool 3.0    时代使用Task 4.0    时代使用 ...

  9. ALSA声卡07_分析调用过程_学习笔记

    1.编译新的strace工具分析aplay和amixer应用程序对声卡的调用过程 (1)因为旧的strace工具不能识别不能识别alsa声卡驱动程序里面的ioctrl. (2)编译过程参考http:/ ...

  10. 【BZOJ】2657: [Zjoi2012]旅游(journey)(树的直径)

    题目 传送门:QWQ 分析 在任意两个不相邻的点连一条线,求这条线能穿过几个三角形. 建图比较讲究(详见代码) 求树的直径. 代码 #include <bits/stdc++.h> usi ...