Xml反序列化
XML的反序列化可在类的属性上标记特性来隐射反序列化。例如这种形式
public class PaymentAccount
{
[XmlAttribute("name")]
public string Name
{ get; set; } [XmlAttribute("environment")]
public string Environment
{ get; set; } [XmlElement("webServiceUrl")]
public string WebServiceUrl
{
get;
set;
} [XmlElement("websiteUrl")]
public string WebUrl
{
get;
set;
} [XmlArray("paymentTypes")]
[XmlArrayItem("paymentType", typeof(PaymentType))]
public List<PaymentType> PaymentTypes { get; set; }
}
也可以实现IXmlSerializable来实现自定义的序列化和反序列化
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Xml;
using System.IO;
using System.Xml.Serialization; namespace MvcTest
{
[XmlRoot("siteMap", Namespace = nameSpace)]
public class SiteMapConfig:IXmlSerializable
{
private const string nameSpace = "urn:schemas-test-com:sitemap"; public static SiteMapConfig Instance
{
get
{
SiteMapConfig cg = null;
string path = HttpContext.Current.Server.MapPath("~/config/sitemap.config");
using (FileStream fs = new FileStream(path, FileMode.Open))
{
XmlSerializer xs = new XmlSerializer(typeof(SiteMapConfig));
object obj=xs.Deserialize(fs);
cg = (SiteMapConfig)obj;
}
return cg;
}
} public SiteMapNode ParentNode { get; set; } public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
} public void ReadXml(XmlReader reader)
{
XmlDocument doc = new XmlDocument();
doc.Load(reader);
XmlNamespaceManager xn = new XmlNamespaceManager(doc.NameTable);
xn.AddNamespace("sm", nameSpace);
XmlNode pNode = doc.SelectSingleNode("/sm:siteMap/sm:siteMapNode",xn);
ParentNode = new SiteMapNode() {
Children=new List<SiteMapNode>(),
Description = pNode.Attributes["description"].Value,
Title=pNode.Attributes["title"].Value,
Url = pNode.Attributes["url"].Value
};
XmlNodeList list = pNode.ChildNodes;
ReadNodes(ParentNode, list);
} private void ReadNodes(SiteMapNode pNode, XmlNodeList nList)
{
if (nList==null || nList.Count == )
{
return;
}
pNode.Children = new List<SiteMapNode>();
foreach (XmlNode node in nList)
{
SiteMapNode sNode=new SiteMapNode() {
Parent=pNode,
Description = node.Attributes["description"].Value,
Title = node.Attributes["title"].Value,
Url = node.Attributes["url"].Value
};
pNode.Children.Add(sNode);
ReadNodes(sNode, node.ChildNodes);
}
} public void WriteXml(XmlWriter writer)
{ }
} public class SiteMapNode
{
public SiteMapNode Parent { get; set; } public string Url { get; set; } public string Title { get; set; } public string Description { get; set; } public List<SiteMapNode> Children { get; set; }
}
}
XML文件:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="urn:schemas-test-com:sitemap" >
<siteMapNode url="" title="p1" description="">
<siteMapNode url="" title="c1" description="" />
<siteMapNode url="" title="c2" description="" />
</siteMapNode>
</siteMap>
Xml反序列化的更多相关文章
- 让Visual Studio 2013为你自动生成XML反序列化的类
Visual Sutdio 2013增加了许多新功能,其中很多都直接提高了对代码编辑的便利性.如: 1. 在代码编辑界面的右侧滚动条上显示不同颜色的标签,让开发人员可以对所编辑文档的修改.查找.定位情 ...
- 自动生成XML反序列化的类
原文地址:http://www.cnblogs.com/jaxu/p/3632077.html Visual Sutdio 2013增加了许多新功能,其中很多都直接提高了对代码编辑的便利性.如: ...
- .NET(C#):觉察XML反序列化中的未知节点
原文 www.cnblogs.com/mgen/archive/2011/12/12/2284554.html 众所周知XML是可以扩展的,XML的元素可以靠名称识别而不是只按照未知识别.在 XML反 ...
- XML反序列化遇到数字型节点值为空导致反序列化异常
实体类: [XmlRoot("stream")] public class _30320DuisiFukuanQueryResponseModel : ResponseModelB ...
- XML反序列化出错,XML 文档(2, 2)中有错误
XML转换为实体类的错误处理方案 一.错误描述: XML反序列化出错,XML 文档(2, 2)中有错误 二.解决方案: 在实体类的字段要加上XmlElement属性 三.具体实现: 1.XML文档 & ...
- Xml反序列化记录
1.概述 公司项目遇到一个需要对接webservice的,webservice大部分用的都是xml来传输的,这里记录一下xml反序列化遇到的问题 2.xml工具类 xml序列化: public sta ...
- 用XmlSerializer进行xml反序列化的时候,程序报错: 不应有 <xml xmlns=''>
原因 一,类型错误: 比如xml本来是UserInfo类型 用XmlSerializer进行反序列化传入的类型是MemberInfo这就会报错 二,xml根节点和对象的类名不一致,而又没有对类加入[X ...
- ASP.NET下使用xml反序列化、缓存实现个性化配置文件的实时生效
因为一些配置属性比较多,存在多组属性,因此结合xml解析.缓存技术,实现配置文化的自动解析.存入缓存.缓存依赖实时更新配置内容. 配置文件反序列化存入缓存的核心方法: public Class.Set ...
- C# XML反序列化与序列化举例:XmlSerializer(转)
using System; using System.IO; using System.Xml.Serialization; namespace XStream { /// <summary&g ...
随机推荐
- java写的web服务器
经常用Tomcat,不知道的以为Tomcat很牛,其实Tomcat就是用java写的,Tomcat对jsp的支持做的很好,那么今天我们用java来写一个web服务器 //首先得到一个server, S ...
- sqlitehelper封装
appsettings <configuration> <appSettings> <add key="ConnectionString&q ...
- 预编译那些事#define后面只跟一个“参数”
一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”.有时,希望当满足某条件时对一组语句进行编译,而当条 ...
- Struts2的处理结果(四)——PreResultListener监听器
Struts2的处理结果(四) --PreResultListener监听器 1.PreResultListener是一个监听器接口,他在Action完成控制处理之后,系统转入实际物理视图资源之间被回 ...
- iOS开发学习笔记:基础篇
iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境 ...
- ggplot2 legend图例的修改
ggplot2中的legend包括四个部分: legend.tittle, legend.text, legend.key, legend.backgroud.针对每一部分有四种处理方式: eleme ...
- APP前端公共测试点
- SQL SERVER分区表
简介 分区表是在SQL SERVER2005之后的版本引入的特性.这个特性允许把逻辑上的一个表在物理上分为很多部分.而对于SQL SERVER2005之前版本,所谓的分区表仅仅是分布式视图,也就是多个 ...
- iOS - OC NSNumber 数字
前言 @interface NSNumber : NSValue @interface NSDecimalNumber : NSNumber 将基本数据类型包装成 OC 对象 1.NSNumber 与 ...
- 应用部署到JBOSS上遇到的问题
原来应用在WAS7.0下,移植到JBOSS eap5.1.2下后,遇到了一些问题,特此记录: 1.数据源配置 在was中,datasource中获取数据源名称时,直接写was中配置的数据源名称即可.而 ...