C# xml与对象相互转换
例如:
1.对象转xml(对象序列化为xml)
string strImage= XmlSerializeHelper.Serialize<List<ImageSingle>>(imageList);
2.xml转对象(反序列化)
Image bojimag= XmlSerializeHelper.DeSerialize<Image>(strimage);
该序列化处理类如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using System.IO;
using System.Xml;
using System.Text.RegularExpressions; namespace Helper
{
public class XmlSerializeHelper
{ public static string Serialize<T>(T obj)
{
return Serialize<T>(obj, Encoding.UTF8);
} //对象转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);
string str = sr.ReadToEnd();
return str;
} } /// <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);
} }
}
} XmlSerializeHelper.cs
C# xml与对象相互转换的更多相关文章
- XML 和 java对象相互转换
		
XML 和 java对象相互转换 博客分类: XML 和 JSON 下面使用的是JDK自带的类,没有引用任何第三方jar包. Unmarshaller 类使客户端应用程序能够将 XML 数据转换为 ...
 - XML与DataSet相互转换,DataSet查询
		
以FileShare.Read形式读XML文件: string hotspotXmlStr = string.Empty; try { Stream fileStream = new FileStre ...
 - Springboot中使用Xstream进行XML与Bean 相互转换
		
在现今的项目开发中,虽然数据的传输大部分都是用json格式来进行传输,但是xml毕竟也会有一些老的项目在进行使用,正常的老式方法是通过获取节点来进行一系列操作,个人感觉太过于复杂.繁琐.推荐一套简单的 ...
 - XML转换为对象操作类详解
		
//XML转换为对象操作类 //一,XML与Object转换类 using System.IO; using System.Runtime.Serialization.Formatters.Binar ...
 - C# 使用XML序列化对象(二)
		
在C# 使用XML序列化对象(一)中描述了使用XML序列化对象的最简单的实现. 现在我们来看看稍微复杂一点的情况: 现有两个类:A和B,B是A的派生类,如下所示: public class A { p ...
 - JavaScript DOM对象和JQuery对象相互转换
		
1.分析源代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...
 - c#xml序列化对象,xml标记都缩写了
		
最近最后一个接口,他们的格式很严格必须是如下格式 <message> <age>20</age> <name>张三</name> </ ...
 - XML和对象属性互转的基类
		
本人做了一个XML和对象属性互转的基类,现在放上来有兴趣拿去看一下,用法很简单,声明一个BaseConversion的子类,该子类与你想转换的对象相对应,然后覆盖基类的两个虚方法,然后在里面写元素与对 ...
 - jackson xml转对象 对象转xml
		
public static void main(String[] args) throws Exception { XnServiceGetUserRequest xnServiceGetUserRe ...
 - asp.net 对象转XML,XML转对象
		
//对象转XML public static string ObjToXml(object obj) { using (MemoryStream Stream = new MemoryStream() ...
 
随机推荐
- Kalman滤波器的原理与实现
			
Kalman滤波器的原理与实现 卡尔曼滤波器(Kalman Filter)是一个十分强大滤波器,虽然叫做滤波器,卡尔曼滤波器其实可以起到到两个作用,即预测与更新,这与我们在其运行时所关注的环节有关.当 ...
 - 官方直播丨“Hello Ability:从页面跳转开始”周三晚不见不散
			
12月8日 19:00-20:30,Hello HarmonyOS系列课程的第四期"Hello Ability:从页面跳转开始"线上直播,将带你学习如何快速通过JS page间.A ...
 - sql 语句系列(加减乘除与平均)[八百章之第十四章]
			
avg的注意事项 一张t2表: select * from t2 select AVG(sal) from t2 得到的结果是: 本来我们得到的结果应该是10的.但是得到的结果确实15. 这是因为忽略 ...
 - linux 连接wifi
			
前言 我使用树莓派的时候实际过的. 正文 第一步扫描wifi: iwlist wlan0 scan 然后配置: vim /etc/wpa_supplicant/wpa_supplicant.conf ...
 - Android Studio制作简单登录界面
			
实现目标 应用线性布局设计登录界面,要求点击输入学号时弹出数字键盘界面,点击输入密码时弹出字母键盘,出现的文字.数字.尺寸等全部在values文件夹下相应.xml文件中设置好,使用时直接引用.当用户名 ...
 - Locust、Jemter、Loadrunner三种工具的分布式压测
			
前言: 最近公司接了一个云上展会项目,合同里签订的是6w并发连接数和2w QPS的性能指标,还有监理单位,第三方评测单位. 唉,先吐槽一下,有了监理和评测,文档tmd一堆堆,严格按照软件开发来执行,写 ...
 - FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
			
<FFmpeg开发实战:从零基础到短视频上线>一书的例程主要测试本地的音视频文件,当然为了安全起见,很多网络视频都采用了https地址.FFmpeg若要访问https视频,就必须集成第三 ...
 - 【笔记】join using&AVG
			
oracle using 在oracle中,using用于简化连接查询,只有当查询是等值连接和连接中的列必须具有相同的名称与数据类型时,才能使用using关键字进行简化 比如原来是 select s. ...
 - SysAK 应用抖动诊断篇—— eBPF又立功了! | 龙蜥技术
			
简介:且看 SysAK 是如何打造一款性能开销不大.安全可靠.且灵活的关中断检测工具.  文 / 系统运维 SIG 编者按:还记得曾经风靡一时的狄仁杰探案系列之<他抖任他抖,IO诊断在我手& ...
 - Docker Desktop v20.10.8 和 WSL2 迁移镜像存储目录
			
只迁移存储镜像和挂载文件目录:https://www.cnblogs.com/lemonK/p/17781775.html 同时迁移docker程序目录:https://www.cnblogs.com ...