using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization; namespace ConsoleApp.Test
{
public class XmlTest
{
public void TestXml()
{
var dept = new Depts
{
Id = 1,
Name = "部门",
UserList = new List<Users>
{
new Users
{
Id=2,
CreateTime=DateTime.Now.ToString("yyyy-MM-dd"),
IsLock=true,
Name="张三",
Sex="男"
},
new Users
{
Id=2,
CreateTime=DateTime.Now.ToString("yyyy-MM-dd"),
IsLock=false,
Name="李四",
Sex="女"
}
}
};
var xmlStr = XmlSerializer(dept);
var xmlObj = XmlDeserialize(typeof(Depts),xmlStr);
Console.WriteLine(xmlStr);
} /// <summary>
/// 序列化XML
/// </summary>
/// <param name="obj">对象</param>
/// <returns></returns>
public static string XmlSerializer(object obj)
{
var str = string.Empty;
using (var stream=new MemoryStream())
{
//创建序列化对象
XmlSerializer xml = new XmlSerializer(obj.GetType());
//序列化对象
xml.Serialize(stream, obj);
stream.Position = 0;
using (var sr = new StreamReader(stream))
{
str = sr.ReadToEnd();
}
}
return str;
}
public static string Serializer1(object obj,string encoding="utf-8",bool utf8Bom=false)
{
string rtStr;
using (MemoryStream ms = new MemoryStream())
{
XmlWriterSettings settings = new XmlWriterSettings();
//要求缩进
settings.Indent = false;
//注意如果不设置encoding默认将输出utf-16
//注意这儿不能直接用Encoding.UTF8如果用Encoding.UTF8将在输出文本的最前面添加4个字节的非xml内容
settings.Encoding = encoding == "utf-8"?new UTF8Encoding(utf8Bom): Encoding.GetEncoding(encoding);
//设置换行符
settings.NewLineChars = string.Empty;//Environment.NewLine; using (XmlWriter xmlWriter = XmlWriter.Create(ms, settings))
{
XmlSerializerNamespaces xsn = new XmlSerializerNamespaces(); xsn.Add(string.Empty, string.Empty);
XmlSerializer serializer = new XmlSerializer(obj.GetType());
serializer.Serialize(xmlWriter, obj, xsn);
}
rtStr = Encoding.GetEncoding(encoding).GetString(ms.ToArray());
}
return rtStr;
} /// <summary>
/// 反序列化XML
/// </summary>
/// <param name="type">对象类型</param>
/// <param name="xmlStr">xml字符串</param>
/// <returns></returns>
public object XmlDeserialize(Type type,string xmlStr)
{
using (StringReader rdr = new StringReader(xmlStr))
{
//声明序列化对象实例serializer
XmlSerializer serializer = new XmlSerializer(type);
//反序列化,并将反序列化结果值赋给变量i
return serializer.Deserialize(rdr);
}
}
} [XmlRoot("dept")]
public class Depts
{
public int Id { get; set; }
[XmlElement("name")]
public string Name { get; set; } [XmlArray("users"), XmlArrayItem("user")]//定义数组节点名称和子集名称
public List<Users> UserList{get;set;}
} [XmlRoot("user")]
public class Users
{
public int Id { get; set; } public string Name { get; set; } [XmlIgnore]//要求不序列化Sex属性
public string Sex { get; set; } [XmlAttribute("islock")] //定义islock属性的序列化为user节点的属性
public bool IsLock { get; set; } [XmlElement("createdate")]//设置createdate属性序列化为user子元素
public string CreateTime { get; set; }
}
}
  

  

XML序列化反序列化的更多相关文章

  1. C# XML序列化/反序列化参考

    .NET提供了很不错的XML序列化/反序列化器,(它们所在的命名空间为System.Xml.Serialization)这是很方便的,下面对它的使用做一些总结,以供参考. 1,简单序列化 public ...

  2. C# Json库 和 xml 序列化反序列化 存在的问题

    json 正常情况下不会对私有成员进行序列化和反序列化, 因此在用json做深拷贝时, 就会丢失数据. 解决办法:       声明成公有成员. json在序列化和反序列化时, 如果类中有IComma ...

  3. php json与xml序列化/反序列化

    在web开发中对象的序列化与反序列化经常使用,比较主流的有json格式与xml格式的序列化与反序列化,今天想写个jsop的小demo,结果发现不会使用php序列化,查了一下资料,做个笔记 简单数组js ...

  4. XML序列化反序列化—常用类

    public class XMLSerializer    {        #region (public) xml序列化        /// <summary>        /// ...

  5. C# 复杂格式多级深度XML序列化反序列化

     default.xml 文件如下: <config><partnerships>  <partnership name="Main_Listener" ...

  6. C# XML序列化/反序列化类XmlSerializer使用示例

    using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; ...

  7. XML序列化/反序列化数据库形式保存和读取。

    直接上码: 首先创建class1类 public class Class1 { public string name { get; set; } public int age { get; set; ...

  8. C# WPF xml序列化 反序列化

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

  9. XML序列化与反序列化接口对接实战,看这篇就够了

    关键字:c# .NET XML 序列化 反序列化 本文为接口对接实践经验分享,不对具体的XML概念定义进行阐述:涉及工具类及处理方法已在生产环境使用多年,可放心使用.当然如果你发现问题,或有不同想法, ...

随机推荐

  1. 绑定方法和隐藏属性之property装饰器

    目录 一:绑定方法 1.绑定给对象的方法 2.绑定给类的方法 3.非绑定方法之静态方法 二,隐藏属性 1.如何隐藏属性 三,property 装饰器 一:绑定方法 1.绑定给对象的方法 class P ...

  2. maven一键构造及常用命令

    maven一键构造及常用命令 1.maven的一键构建 我们不再使用本地的Tomcat对项目进行编译.测试.运行.打包.安装.部署等一系列过程,而是使用maven自身集成的Tomcat插件来完成这些操 ...

  3. Python:使用pyinstaller打包含有gettext locales语言环境的项目

    问题 如何使用 pyinstaller 打包使用了 gettext 本地化的项目,最终只生成一个 exe 文件 起因 最近在用 pyhton 做一个图片处理的小工具,顺便接触了一下 gettext,用 ...

  4. java多线程中同步的问题?

    一.通过模拟网络延迟,解决同步的问题. package com.zxf.demo; public class G01 implements Runnable{ private int num=10; ...

  5. HCNP Routing&Switching之组播技术-IGMP-Snooping

    前文我们了解了组播协议IGMP相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15700550.html:今天我们来聊一聊二层交换机处理组播报文所面临的 ...

  6. PyTorch 介绍 | BUILD THE NEURAL NETWORK

    神经网络由对数据进行操作的layers/modules组成.torch.nn 命名空间提供了所有你需要的构建块,用于构建你自己的神经网络.PyTorch的每一个module都继承自nn.Module. ...

  7. 分布式缓存——Redis

    一.Redis介绍 Redis是一个开源的使用C语言编写.开源.支持网络.可基于内存亦可持久化的日志型.高性能的key-value数据库,并提供多种语言的API.它通常被称为数据结构服务器,因为值(v ...

  8. C程序:年转化天

    突然想算算自己到底活了多少天了,e,就是纯属为了好玩,毕竟咱作为一名C初学者还是要多练练的- 为了好玩,加了个密码登陆的,密码是521,还有就是不太懂时间获取... 具体闰年的判断方法: 代码如下: ...

  9. SpringBeanUtils的部分方法类

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/12060553.html SpringBeanUtils的部分方法类: import java. ...

  10. SpringBoot+Dubbo+ZooKeeper+Maven入门实践

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11798626.html 注*** 本实例为仅适合初学者,关于dubbo和springboot以 ...