C# 复杂格式多级深度XML序列化反序列化
default.xml 文件如下:
<config>
<partnerships>
<partnership name="Main_Listener">
<loggers isAdditive="false">
<logger type="file" name="Filelogger">
<propertys>
<property name="FileName" value="log\\outbound.log"/>
<property name="MaxFileSize" value="10MB"/>
<property name="MaxBackupIndex" value="10"/>
<property name="ConversionPattern" value="%d [%t] %-5p %c %x - %m%n"/>
</propertys>
</logger>
<logger type="file" name="Filelogger">
<propertys>
<property name="FileName" value="log\\outbound.log"/>
<property name="MaxFileSize" value="10MB"/>
<property name="MaxBackupIndex" value="10"/>
<property name="ConversionPattern" value="%d [%t] %-5p %c %x - %m%n"/>
</propertys>
</logger>
</loggers>
<senders>
<sender type="file">
<propertys>
<property name="PollingDir" value="WMSin"/>
<property name="Interval" value="10"/>
<property name="IsBackup" value="true"/>
<property name="MaxFilenameLength" value="31"/>
<property name="BackupDir" value="ARWMSin\\$date.yyyyMMdd$"/>
</propertys>
</sender>
<sender type="file">
<propertys>
<property name="PollingDir" value="WMSin"/>
<property name="Interval" value="50"/>
<property name="IsBackup" value="true"/>
<property name="MaxFilenameLength" value="33"/>
<property name="BackupDir" value="ARWMSin\\$date.yyyyMMdd$"/>
</propertys>
</sender>
<sender type="file">
<propertys>
<property name="PollingDir" value="WMSin"/>
<property name="Interval" value="50"/>
<property name="IsBackup" value="true"/>
<property name="MaxFilenameLength" value="34"/>
<property name="BackupDir" value="ARWMSin\\$date.yyyyMMdd$"/>
</propertys>
</sender>
</senders>
<receivers>
<receiver type="exceed">
<propertys>
<property name="IsBackup" value="true"/>
<property name="OriginalName" value="Backup\\In\\$date.yyyyMMdd$\\$Doctype$\\$Doctype$-$GUI$-$date.HHmmss$.ori.xml"/>
<property name="ResponseName" value="Backup\\In\\$date.yyyyMMdd$\\$Doctype$\\$Doctype$-$GUI$-$date.HHmmss$.rsp.xml"/>
<property name="ErrorName" value="inbound\\reprocess\\$Doctype$-$GUI$-$date.HHmmss$.err.xml"/>
</propertys>
</receiver>
</receivers>
<processors>
<processor name="com.creaction.central.processor.EncodingProcessor">
<propertys>
<property name="FromEncoding" value="UTF-8"/>
<property name="ToEncoding" value="GB2312"/>
</propertys>
</processor>
<processor name="com.creaction.central.processor.ElemGetProcessor">
<propertys>
<property name="PropName" value="Doctype"/>
<property name="TagName" value="Doctype"/>
</propertys>
</processor>
<processor name="com.creaction.central.processor.ElemGetProcessor">
<propertys>
<property name="PropName" value="GUI"/>
<property name="TagName" value="GUI"/>
</propertys>
</processor>
<processor name="com.creaction.central.processor.XSLProcessor">
<propertys>
<property name="XSLFile" value=".\\transform\\$Doctype$.xsl"/>
</propertys>
</processor>
</processors>
</partnership>
</partnerships>
</config>
xml反序列化MModel封装各种类:
[XmlType(TypeName = "config")]
public class ConfigFileModel
{
[XmlArray("partnerships")]
public List<partnership> partnerships { get; set; }
}
[XmlType(TypeName = "partnership")]
public class partnership
{
[XmlAttribute]
public string name { get; set; }
[XmlArray("loggers")]
public List<logger> loggers { get; set; }
[XmlArray("senders")]
public List<sender> senders { get; set; }
[XmlArray("receivers")]
public List<receiver> receivers { get; set; }
[XmlArray("processors")]
public List<processor> processors { get; set; }
}
#region logger
[XmlType(TypeName = "logger")]
public class logger
{
[XmlAttribute]
public string isAdditive { get; set; }
[XmlAttribute]
public string type { get; set; }
[XmlAttribute]
public string name { get; set; }
[XmlArray("propertys")]
public List<property> propertys { get; set; }
}
#endregion
#region sender
[XmlType(TypeName = "sender")]
public class sender
{
[XmlAttribute]
public string type { get; set; }
[XmlArray("propertys")]
public List<property> propertys { get; set; }
}
#endregion
#region receiver
[XmlType(TypeName = "receiver")]
public class receiver
{
[XmlAttribute]
public string type { get; set; }
[XmlArray("propertys")]
public List<property> propertys { get; set; }
}
#endregion
#region processor
[XmlType(TypeName = "processor")]
public class processor
{
[XmlAttribute]
public string type { get; set; }
[XmlArray("propertys")]
public List<property> propertys { get; set; }
}
#endregion
[XmlType(TypeName = "property")]
public class property
{
[XmlAttribute]
public string name { get; set; }
[XmlAttribute]
public string value { get; set; }
}
C# XML序列化和反序列化方法如下:
#region 指定xml路径执行序列化和反序列化
/// <summary>
/// XML序列化某一类型到指定的文件
/// </summary>
/// <param name="filePath"></param>
/// <param name="obj"></param>
/// <param name="type"></param>
public static void SerializeToXml<T>(string filePath, T obj)
{
try
{
using (System.IO.StreamWriter writer = new System.IO.StreamWriter(filePath))
{
System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T));
xs.Serialize(writer, obj);
}
}
catch (Exception ex)
{
}
}
/// <summary>
/// 从某一XML文件反序列化到某一类型
/// </summary>
/// <param name="filePath">待反序列化的XML文件名称</param>
/// <param name="type">反序列化出的</param>
/// <returns></returns>
public static T DeserializeFromXml<T>(string filePath)
{
try
{
if (!System.IO.File.Exists(filePath))
throw new ArgumentNullException(filePath + " not Exists");
using (System.IO.StreamReader reader = new System.IO.StreamReader(filePath))
{
System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T));
T ret = (T)xs.Deserialize(reader);
return ret;
}
}
catch (Exception ex)
{
return default(T);
}
}
#endregion
控制台程序执行:
static void Main(string[] args)
{
ConfigFileModel xml1 = CCERP.Base.Common.XmlHelper.DeserializeFromXml<ConfigFileModel>("default.xml");
Console.WriteLine(xml1.partnerships[0].processors[0].propertys[1].name);
Console.ReadLine();
}
C# 复杂格式多级深度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序列化/反序列化类XmlSerializer使用示例
using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; ...
- XML序列化反序列化
using System; using System.Collections.Generic; using System.IO; using System.Xml.Serialization; nam ...
- 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概念定义进行阐述:涉及工具类及处理方法已在生产环境使用多年,可放心使用.当然如果你发现问题,或有不同想法, ...
随机推荐
- python 数据类型详解(转)
转自:http://www.cnblogs.com/linjiqin/p/3608541.html 目录1.字符串2.布尔类型3.整数4.浮点数5.数字6.列表7.元组8.字典9.日期 1.字符串1. ...
- m2014-architecture-imgserver->配置lighttpd mod_mem_cache 模块做静态资源服务器
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freehat.blog.51cto.com/1239536/989171 一 l ...
- UITableView取消选中颜色、常用操作
UITableView取消选中颜色.常用操作 使用空白view取代cell - (UITableViewCell *)tableView:(UITableView *)tableView cell ...
- 关于cstring ->string-> const char * 用U2A一步转换 错误的内存问题
// CStringTest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #incl ...
- .Net Core 使用EF Core方法
新建项目后,使用NuGet安装包: Install-Package Microsoft.EntityFrameworkCore Install-Package Microsoft.EntityFram ...
- Delphi使用ADO连接网络数据库,断网后重连问题
原始文章: https://blog.csdn.net/blog_jihq/article/details/11737699# 使用TADOConnection对象连接网络数据库(以MySQL为例), ...
- html-withimg-loder
由于 webpack 对 html 的处理不太好,打包 HTML 文件中的图片资源是相对来说最麻烦的.这里需要引用一个插件—— html-withimg-loder // 打包 HTML 文件中的图片 ...
- IT公司常见的内网漏洞表格
访问控制类漏洞与隐患 这一类漏洞与隐患属于访问控制与身份鉴别问题,一般有没有配置访问控制.访问控制弱(弱口令或者空口令),身份鉴别可以绕过等问题 漏洞协议组件 漏洞类型 漏洞评级 SSH 弱口令 严重 ...
- 【面向对象】----【prototype&&__proto__&&实例化对象三者之间的关系】(四)-----【巷子】
1.构造函数 a.什么是构造函数? 解释:通过关键字new 创建的函数叫做构造函数 作用:用来创建一个对象 废话少说直接上代码,首先我们还是创建一个构造函数人类 然后我们在创建两个实例,一个凡尘 一个 ...
- Laravel 5.7 No 'Access-Control-Allow-Origin' header is present on the request resource
前后端项目跨域访问时会遇到此问题,解决方法如下: 创建一个中间件 php artisan make:middleware EnableCrossRequestMiddleware 该中间件的文件路径为 ...