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. 使用Termux并与ubuntu建立ssh连接

    什么是Termux? Termux是一个Android终端仿真器和Linux环境应用程序,直接工作,无需根目录或设置.一个最小的基本系统被自动安装-额外的软件包可以使用APT软件包管理器来使用.不需要 ...

  2. RSS生成工具/服务推荐

    时至2022,关于碎片化阅读.信息焦虑的讨论仍在继续且似乎并没有形成广泛共识的解决办法.而研究生期间主要研究方向就是推荐系统且未来也大概率从事相关岗位的我,对以算法为中心的信息获取方式可以说是又爱又恨 ...

  3. Mac OS Fusion Linux虚拟机网络设置

    1.设定网络为nat 2.ifconfig查看mac机的ip 3.进入虚拟机设定网络,手动指定自己ip为mac机网段ip,xxx.xxx.xxx.2是固定的路由及DNS的ip 4.关闭再打开网络即可访 ...

  4. ApacheCN 数据科学译文集 2020.8

    协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标.--<原则>,生活原则 2.3.c 在线阅读 ApacheCN 面试求职交流群 724187166 Apach ...

  5. HBuilderX频繁关闭,导致启动不了?

    根据官方给出的指南(http://ask.dcloud.net.cn/article/35583),在我的电脑打开%appdata%下面的会有HBuilderX目录,把这个目录删除或改名就可以启动了:

  6. java在访问https资源时,忽略证书信任问题 (转)

    java程序在访问https资源时,出现报错sun.security.validator.ValidatorException: PKIX path building failed: sun.secu ...

  7. linux shell 中数组的定义和for循环遍历的方法

    linux 中定义一个数据的语法为: variable=(arg1 arg2 arg3 ....) 中间用空格分开.数组的下标从0开始. 1 获取下标为n的元素: variable[n] 而且不存在数 ...

  8. 【转】zabbix监控mysql

    纯属搬家收藏,原文链接 https://www.cnblogs.com/shenjianyu/p/6627843.html 注意: 1.关注的重点在agent端部分 2.zabbix_get命令没有, ...

  9. 如何添加自己的code snippet

    好了我们开始说吧 1.先建一个后缀名为.sublime-snippet的文件

  10. 【发点感慨】我的cnblogs的文章被爬到了别的网站,阅读量比在cnblogs上还要高

    近期我写了挺多VictoriaMetrics的文章,在搜索相关文章的时候发现,我的文章被别的网站爬去了: 写写技术文章就是无偿分享给别人看的,越多人看到越多人受益,这一点没毛病. 但是: 爬了别人的文 ...