C# XML序列化与反序列化与XML格式详解
1、https://www.cnblogs.com/sandyliu1999/p/4844664.html
XML是有层次结构的,序列化实际就是内存化,用连续的结构化的内存来存储表示一个对象,那么这两者之间就有区别了,查看下面的对应规则。

看上面链接里给出的例子应该就差不多可以看明白了。
下面看下XML格式的详解。
2、http://www.cnblogs.com/chenjiacheng/p/6522563.html --xml格式详解。




3、http://blog.csdn.net/com_ma/article/details/73277535
另一篇xml格式文档详解,摘取一点有用信息,开始标签和结束标签中间的是内容,一个元素可以有多个属性,格式如下:<元素名 属性名=“属性值” 属性名=“属性值”>

4、增加一个自己应用的实例
首先是xml文档,文档结构表明了需求数据结构。
<?xml version="1.0" encoding="utf-8"?>
<root>
<ROOTITEMS>
<RootItem>
<NAME>system</NAME>
<Items>
<Item Value="sysDescr" OID="1.3.6.1.2.1.1.1.0" ></Item>
<Item Value="sysUpTime" OID="1.3.6.1.2.1.1.3.0" ></Item>
<Item Value="sysContact" OID="1.3.6.1.2.1.1.4.0" ></Item>
<Item Value="sysName" OID="1.3.6.1.2.1.1.5.0" ></Item>
<Item Value="sysLocation" OID="1.3.6.1.2.1.1.6.0" ></Item>
<Item Value="sysServices" OID="1.3.6.1.2.1.1.7.0" ></Item>
<Item Value="sysORLastChange" OID="1.3.6.1.2.1.1.8.0" ></Item>
<Item Value="sysORTable" OID="1.3.6.1.2.1.1.9.0"></Item>
</Items>
</RootItem>
</ROOTITEMS>
</root>
然后是数据结构类,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization; namespace WindowsFormsApplication1
{
[XmlRoot("root")]
public class SnmpMIB
{
[XmlArray("ROOTITEMS"),XmlArrayItem("RootItem")]
public RootItem[] oidItems
{
get;
set;
}
} public class RootItem
{
[XmlElement("NAME")]
public string rootName
{
set;
get;
} [XmlArray("Items"), XmlArrayItem("Item")]
public Item[] items
{
set;
get;
}
} public class Item
{
[XmlAttribute("Value")]
public string name
{
set;
get;
} [XmlAttribute( "OID")]
public string oid
{
set;
get;
}
}
}
序列化与反序列化类,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml.Serialization; namespace WindowsFormsApplication1
{
class ConfigManager
{
private static SnmpMIB _snmpOids = null;
public ConfigManager() { } public SnmpMIB Get(string path)
{
if (_snmpOids == null)
{
FileStream fs = null;
try
{
XmlSerializer xs = new XmlSerializer(typeof(SnmpMIB));
fs = new FileStream(path, FileMode.Open, FileAccess.Read);
_snmpOids = (SnmpMIB)xs.Deserialize(fs);
fs.Close(); return _snmpOids;
}
catch
{
if (fs != null)
fs.Close(); throw new Exception("Xml deserialization failed!");
}
}
else
{
return _snmpOids;
}
} public void Set(string path, SnmpMIB snmpOids)
{
if (snmpOids == null)
throw new Exception("Parameter humanResource is null!"); FileStream fs = null;
try
{
XmlSerializer xs = new XmlSerializer(typeof(SnmpMIB));
fs = new FileStream(path, FileMode.Create, FileAccess.Write);
xs.Serialize(fs, snmpOids);
_snmpOids = null;
fs.Close();
}
catch
{
if (fs != null)
fs.Close();
throw new Exception("Xml serialization failed!");
}
}
}
}
最后就是应用类了。
ConfigManager config = new ConfigManager();
SnmpMIB snmpMib = null;
try
{
snmpMib = config.Get("XMLFile1.xml");
}
catch (Exception ex)
{
Console.WriteLine("Here is Error!");
} if (snmpMib != null)
{
RootItem[] items = snmpMib.oidItems;
foreach(RootItem item in items)
{
Console.WriteLine(item.rootName);
foreach (Item it in item.items)
{
Console.WriteLine(it.name + " " + it.oid);
}
}
}
数据结构的定义是为了简化SNMP的MIB内容,所以需要自定义这样一个数据结构。关于SNMP协议,可以参见前一篇文档。
C# XML序列化与反序列化与XML格式详解的更多相关文章
- C#序列化与反序列化(Serialize,Deserialize)实例详解
这篇文章主要介绍了C#序列化与反序列化(Serialize,Deserialize)的方法,实例分析了C#序列化与反序列化的常见技巧,需要的朋友可以参考下 本文实例讲述了C#序列化与反序列化(Seri ...
- XmlSerializer 对象的Xml序列化和反序列化
http://www.cnblogs.com/yukaizhao/archive/2011/07/22/xml-serialization.html 这篇随笔对应的.Net命名空间是System.Xm ...
- C#的XML序列化及反序列化
webservice在工作中用到的很多,基本都是以XML格式问通讯内容,其中最关键的就是XML串的序列化及反序列化. XML的运用中有两种信息传递,一种为XML的请求信息,另一种为返回信息,要运用XM ...
- XmlSerializer 对象的Xml序列化和反序列化,XMLROOT别名设置
这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中 ...
- c# XML序列化与反序列化
c# XML序列化与反序列化 原先一直用BinaryFormatter来序列化挺好,可是最近发现在WinCE下是没有办法进行BinaryFormatter操作,很不爽,只能改成了BinaryWrite ...
- Windows phone 之XML序列化与反序列化
为什么要做序列化和反序列化? 一个回答: 我们都知道对象是不能在网络中直接传输的,不过还有补救的办法.XML(Extensible Markup Language)可扩展标记语言,本身就被设计用来存储 ...
- C#操作Xml:XmlSerializer 对象的Xml序列化和反序列化
这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中的对 ...
- Json/XML序列化和反序列化
1.json序列化和反序列化 序列化是将对象状态转换为可保持或传输的格式的过程; 反序列化,它将流转换为对象; 1)Json.Net 推荐使用Json.Net类库,需要引入的命名空间; 序列化:Jso ...
- 基于.net core封装的xml序列化,反序列化操作
需求: 由于在.net core中去除了Xml序列化XmlSerializer操作类.因此,在于一此数据传输当中出,需要用到对xml格式字符串的处理问题.因此封装了一个xml序列化与反序列化操作的类库 ...
随机推荐
- 【2018.11.23】2018WCTest(7)
向已退役学长致敬! 题目&他的题解 T1 一道睿智题目,正常思路就是时空复杂度均为 $O(n\times 32768)$ 的背包.这个做法不被卡时间却被卡空间,其实就是想让你离线处理询问,然后 ...
- cf682E Alyona and Triangles
You are given n points with integer coordinates on the plane. Points are given in a way such that th ...
- N皇后-位运算优化
N皇后问题 时间限制: 5 Sec 内存限制: 128 MB 题目描述 魔法世界历史上曾经出现过一个伟大的罗马共和时期,出于权力平衡的目的,当时的政治理论家波利比奥斯指出:“事涉每个人的权利,绝不应 ...
- STL中heap用法
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; ]={,, ...
- 自己写了一个超级简便且傻瓜式的且功能强大的CSV组件(并且代码优雅,绝对没有一行多余的代码)
github地址: https://github.com/yangfeixxx/chipsCSV.git 解决的问题:解决了传统的CSV工具类对于实体类无法自动化封装为带表头的CSV文件的痛点,在读取 ...
- AtCoder Regular Contest 074F - Lotus Leaves
$n \leq 300,m \leq 300$,$n*m$的格子里有起点有终点有空地有障碍,人会从起点选一个同行或同列空地跳过去,然后一直这样跳到终点.求至少删掉多少格子使得人跳不到终点. 首先S和T ...
- Java 并发编程中的 CyclicBarrier 用于一组线程互相等待
Java 5 引入的 Concurrent 并发库软件包中的 CyclicBarrier 是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point) ...
- 小程序-列表块/类式ul-li格式(1)
摘要 目前列表能布局出来,但是目前我个人还没解决的问题是:如果每个列表块都有详情页怎么解决呢? 1:我的效果图 2.正常的每个都能点击的html 注:上面的代码确实能够实现我的每个[menu2_vie ...
- Codeforces 837 E Vasya's Function
Discription Vasya is studying number theory. He has denoted a function f(a, b) such that: f(a, 0) = ...
- VS调试时不加载符号
加载符号,能够让调试时进入系统的dll中,甚至能达到汇编语言的深度,让你调试时能够逐行进行.但是加载符号的话,会使得每次调试,增加进入到首个断点的时间. 而且有时候也非必要加载符号,它的取消可以使用下 ...