C# 中对象序列化XML的方法
作者:王月半子 时间:2021-11-12 13:51:55
今天我们来看一下在C#中对象序列化XML的方法。
不得不说,在这个Json横行的年代,XML虽然式微,但也的确是一股子清流。(个人感觉)
不多说,直接开始。
首先先说怎么用
需要用到的是这两个命名空间(主要)
using System.Xml;
using System.Xml.Serialization;
然后序列化和反序列化的方式和Json一样。(后面提供封装方法)
string result = XmlSerializeHelper.Serialize<test>(new test
{
name = "Seven",
cardId = "663927",
age = 15,
currentTime = DateTime.Now
});
Console.WriteLine(result);
test test2 = XmlSerializeHelper.DeSerialize<test>(result);
下面来看封装类
public class XmlSerializeHelper
{
//对象转XML
public static string ObjToXml(object obj)
{
using (MemoryStream Stream = new MemoryStream())
{
XmlSerializer xml = new XmlSerializer(obj.GetType());
xml.Serialize(Stream, obj);
Stream.Position = 0;
StreamReader sr = new StreamReader(Stream);
return sr.ReadToEnd();
}
}
public static string Serialize<T>(T obj)
{
return Serialize<T>(obj, Encoding.UTF8);
}
/// <summary>
/// 实体对象序列化成xml字符串
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static string Serialize<T>(T obj, Encoding encoding)
{
try
{
if (obj == null)
{
throw new ArgumentNullException("obj");
}
var ser = new XmlSerializer(obj.GetType());
using (var ms = new MemoryStream())
{
using (var writer = new XmlTextWriter(ms, encoding))
{
writer.Formatting = Formatting.Indented;
ser.Serialize(writer, obj);
}
var xml = encoding.GetString(ms.ToArray());
xml = xml.Replace("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"", "");
xml = xml.Replace("xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"", "");
xml = Regex.Replace(xml, @"\s{2}", "");
xml = Regex.Replace(xml, @"\s{1}/>", "/>");
return xml;
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 反序列化xml字符为对象,默认为Utf-8编码
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="xml"></param>
/// <returns></returns>
public static T DeSerialize<T>(string xml) where T : new()
{
return DeSerialize<T>(xml, Encoding.UTF8);
}
/// <summary>
/// 反序列化xml字符为对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="xml"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static T DeSerialize<T>(string xml, Encoding encoding) where T : new()
{
try
{
var mySerializer = new XmlSerializer(typeof(T));
using (var ms = new MemoryStream(encoding.GetBytes(xml)))
{
using (var sr = new StreamReader(ms, encoding))
{
return (T)mySerializer.Deserialize(sr);
}
}
}
catch (Exception e)
{
return default(T);
}
}
}
Class Of XmlSerializeHelper
好了,板砖要紧,先到这里。
来源:https://www.cnblogs.com/SevenWang/p/14306392.html
标签:c#,对象,序列化,XML
0
投稿
猜你喜欢
nacos使用占位符${}进行参数配置的方法
2022-07-15 08:59:07
Android Spinner 组件的应用实例
2022-07-12 04:50:13
关于IDEA配置文件字符集的问题
2022-11-01 13:06:44
mybatis-plus查询源码详解
2023-02-02 11:58:02
Java编程中随机数的生成方式总结
2022-06-14 11:57:27
Java多线程开发工具之CompletableFuture的应用详解
2023-08-30 00:43:00
利用Java读取二进制文件实例详解
2023-07-27 03:25:42
Java多线程中关于join方法的使用实例解析
2023-08-22 21:47:29
Java 读取外部资源的方法详解及实例代码
2023-01-27 21:19:18
浅谈Java异常的Exception e中的egetMessage()和toString()方法的区别
2022-05-27 00:37:31
springMvc请求的跳转和传值的方法
2023-02-06 17:29:56
Android Studio提示inotify大小不足的解决办法
2022-01-06 23:48:07
WPF实现魔方小游戏
2022-09-06 01:53:18
Javaweb会话跟踪技术Cookie和Session的具体使用
2022-06-24 21:16:33
Android SurfaceView拍照录像实现方法
2022-06-18 17:07:20
Java手写线程池的实现方法
2023-10-30 12:50:03
java中for和forEach的速度比较实例Demo
2022-06-20 07:09:58
Java超详细讲解抽象类的原理与用法
2022-10-31 20:51:42
C#使用SharpZipLib压缩解压文件
2021-10-27 18:56:21
解决Android studio3.6安装后gradle Download失败(构建不成功)
2021-07-20 15:38:42