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反序列化的更多相关文章

  1. 让Visual Studio 2013为你自动生成XML反序列化的类

    Visual Sutdio 2013增加了许多新功能,其中很多都直接提高了对代码编辑的便利性.如: 1. 在代码编辑界面的右侧滚动条上显示不同颜色的标签,让开发人员可以对所编辑文档的修改.查找.定位情 ...

  2. 自动生成XML反序列化的类

    原文地址:http://www.cnblogs.com/jaxu/p/3632077.html   Visual Sutdio 2013增加了许多新功能,其中很多都直接提高了对代码编辑的便利性.如: ...

  3. .NET(C#):觉察XML反序列化中的未知节点

    原文 www.cnblogs.com/mgen/archive/2011/12/12/2284554.html 众所周知XML是可以扩展的,XML的元素可以靠名称识别而不是只按照未知识别.在 XML反 ...

  4. XML反序列化遇到数字型节点值为空导致反序列化异常

    实体类: [XmlRoot("stream")] public class _30320DuisiFukuanQueryResponseModel : ResponseModelB ...

  5. XML反序列化出错,XML 文档(2, 2)中有错误

    XML转换为实体类的错误处理方案 一.错误描述: XML反序列化出错,XML 文档(2, 2)中有错误 二.解决方案: 在实体类的字段要加上XmlElement属性 三.具体实现: 1.XML文档 & ...

  6. Xml反序列化记录

    1.概述 公司项目遇到一个需要对接webservice的,webservice大部分用的都是xml来传输的,这里记录一下xml反序列化遇到的问题 2.xml工具类 xml序列化: public sta ...

  7. 用XmlSerializer进行xml反序列化的时候,程序报错: 不应有 <xml xmlns=''>

    原因 一,类型错误: 比如xml本来是UserInfo类型 用XmlSerializer进行反序列化传入的类型是MemberInfo这就会报错 二,xml根节点和对象的类名不一致,而又没有对类加入[X ...

  8. ASP.NET下使用xml反序列化、缓存实现个性化配置文件的实时生效

    因为一些配置属性比较多,存在多组属性,因此结合xml解析.缓存技术,实现配置文化的自动解析.存入缓存.缓存依赖实时更新配置内容. 配置文件反序列化存入缓存的核心方法: public Class.Set ...

  9. C# XML反序列化与序列化举例:XmlSerializer(转)

    using System; using System.IO; using System.Xml.Serialization; namespace XStream { /// <summary&g ...

随机推荐

  1. 非在线方式搭建Android开发环境

    android 环境搭建 http://jingyan.baidu.com/article/90895e0fba1b5664ed6b0b7e.html android开发环境的搭建(解决sdk下载更新 ...

  2. Windows 多线程知识点汇总

    一.什么叫原子性? 答:一个操作不会被分成两个时间片来执行,不会刚执行到一半,由于时间片到了,CPU就跑去执行其他线程了.在多线程环境中对一个变量进行读写时,我们需要有一种方法能够保证对一个值的操作是 ...

  3. 2.建立exception包,建立Bank类,类中有变量double balance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(double dAmount),当取款的数额大于存款时,抛出InsufficientFundsException,取款数额为负数,抛出NagativeFundsException,

    public class Bank { Double qian=0.0; double newBank(double a) { qian=qian+a; return qian; } double w ...

  4. 【leetcode❤python】 38. Count and Say

    #-*- coding: UTF-8 -*- class Solution(object):    def countAndSay(self, n):        """ ...

  5. 【leetcode❤python】66. Plus One

    class Solution:      # @param digits, a list of integer digits      # @return a list of integer digi ...

  6. Task<TResult>的使用

    https://msdn.microsoft.com/en-us/library/dd321424(v=vs.110).aspx Represents an asynchronous operatio ...

  7. CSS布局口诀 - CSS BUG顺口溜

    在进行CSS网页布局时遇到BUG,请认真阅读以下内容,非常容易记忆的,不知道哪位高人把CSS BUG编成了顺口溜了!看看好不好记住呢? 一.IE边框若显若无,须注意,定是高度设置已忘记: 二.浮动产生 ...

  8. 清除SVN获取文件的所有.svn文件夹

    Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\清除SVN信息] @=&qu ...

  9. eclipse svn异常:RA layer request failed 的解决方案

    这几天svn总是出问题,网上搜了好多资料,今天才真正找到解决办法. RA layer request failedsvn: OPTIONS of 'https://192.168.0.104/svn/ ...

  10. DOM解析XML练习

    首先以XML文件存储数据,格式如下(作为数据库) exam.xml <?xml version="1.0" encoding="UTF-8" standa ...