XML序列化反序列化
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序列化反序列化的更多相关文章
- C# XML序列化/反序列化参考
.NET提供了很不错的XML序列化/反序列化器,(它们所在的命名空间为System.Xml.Serialization)这是很方便的,下面对它的使用做一些总结,以供参考. 1,简单序列化 public ...
- C# Json库 和 xml 序列化反序列化 存在的问题
json 正常情况下不会对私有成员进行序列化和反序列化, 因此在用json做深拷贝时, 就会丢失数据. 解决办法: 声明成公有成员. json在序列化和反序列化时, 如果类中有IComma ...
- php json与xml序列化/反序列化
在web开发中对象的序列化与反序列化经常使用,比较主流的有json格式与xml格式的序列化与反序列化,今天想写个jsop的小demo,结果发现不会使用php序列化,查了一下资料,做个笔记 简单数组js ...
- XML序列化反序列化—常用类
public class XMLSerializer { #region (public) xml序列化 /// <summary> /// ...
- C# 复杂格式多级深度XML序列化反序列化
default.xml 文件如下: <config><partnerships> <partnership name="Main_Listener" ...
- C# XML序列化/反序列化类XmlSerializer使用示例
using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; ...
- XML序列化/反序列化数据库形式保存和读取。
直接上码: 首先创建class1类 public class Class1 { public string name { get; set; } public int age { get; set; ...
- C# WPF xml序列化 反序列化
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- XML序列化与反序列化接口对接实战,看这篇就够了
关键字:c# .NET XML 序列化 反序列化 本文为接口对接实践经验分享,不对具体的XML概念定义进行阐述:涉及工具类及处理方法已在生产环境使用多年,可放心使用.当然如果你发现问题,或有不同想法, ...
随机推荐
- 如何使用c#编写单片机程序
因为个人喜爱想研究单片机,但是不太会c,然后再找资料研究有没有其他的方法发现国外的c# nanoframework 框架可以编写单片机程序,本文我将会用自己踩过的坑来总结一些c#编写单片机的一些经 ...
- Asp-Net-Core学习笔记:身份认证入门
前言 过年前我又来更新了~ 我就说了最近不是在偷懒吧,其实这段时间还是有积累一些东西的,不过还没去整理-- 所以只能发以前没写完的一些笔记出来 就当做是温习一下啦 PS:之前说的红包封面我还没搞,得抓 ...
- 第07讲:Flink 常见核心概念分析
Flink系列文章 第01讲:Flink 的应用场景和架构模型 第02讲:Flink 入门程序 WordCount 和 SQL 实现 第03讲:Flink 的编程模型与其他框架比较 第04讲:Flin ...
- django之djangorestframework序列化操作
只介绍序列化操作:serializers.ModelSerializer 与 serializers.Serializer 使用序列化的目的:将数据序列化成 JSON 对象 当页面上需要动态加载内容 ...
- 「SNOI2017」一个简单的询问
「SNOI2017」一个简单的询问 简单的解法 显然可以差分一下. \[get(l,r,x)\times get(l1,r1,x)=get(1,r,x) \times get(1,r1,x)-get( ...
- [POI2009]SLO-Elephants
首先可以发现我们可以发现最终状态和初始状态都是一个大小为 \(n\) 的排列,且恰好有 \(n\) 种关系,于是我们对于每个 \(a_i\) 连一条 \(a_i \rightarrow b_i\) 的 ...
- JAVA多线程学习十三 - 同步工具CyclicBarrier与CountDownLatch
一.CyclicBarrier CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及一组固定大小的线程的程序 ...
- nginx入门教程 (转)
1.Nginx 状态码配置和错误文件 server { # 配置访问 /test.js 时报 403 错 location /test.js { return 403; } # 配置访问 /404 时 ...
- spring 事务的传播级别和隔离级别
1.事务的传播级别 1)@Transactional(propagation=Propagation.REQUIRED):默认的spring事务传播级别,使用该级别的特点是,如果上下文中已经存在事务, ...
- IPV4地址学习笔记
IP地址由网络号和主机号组成.IPV4由32位正整数来表示. A类IP:8位网络号+24主机号,网络号以0开头,网络号范围0~127 B类IP:16位网络号+16主机号,网络号以10开头,网络号范围1 ...