在Silverlight项目中,如果您想最大程度的减少xap包的大小,仅使用默认System.Xml命名空间下提供的功能来实现“XML序列化/反序列化”,恐怕XmlReader/XmlWriter将成为唯一选择了,下面是示例代码:

using System.IO;
using System.Text;
using System.Xml;
  
namespace slLib
{
    public class Person
    {
        private string _name = "";
  
        /// <summary>
        /// 姓名
        /// </summary>
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
  
  
        private int _age = 0;
  
        /// <summary>
        /// 年龄
        /// </summary>
        public int Age        
        {
            get { return _age; }
            set { _age = value; }
        }
  
        /// <summary>
        /// 将Person实例转化为xml字符串
        /// </summary>
        /// <returns></returns>
        public string ToXmlString() 
        {
            MemoryStream ms = new MemoryStream();
            XmlWriter writer = XmlWriter.Create(ms);
  
            writer.WriteStartDocument();
                writer.WriteStartElement("data");
                    writer.WriteStartElement("person");                      
                          
                        writer.WriteStartElement("name");                       
                            writer.WriteAttributeString("type", "String");
                            writer.WriteValue(this.Name);
                        writer.WriteEndElement();
  
                        writer.WriteStartElement("age");
                            writer.WriteAttributeString("type", "Int32");
                            writer.WriteValue(this.Age);
                        writer.WriteEndElement();
  
                    writer.WriteEndElement();
                writer.WriteEndElement();
            writer.WriteEndDocument();
  
            writer.Flush();
            writer.Close();
            byte[] bytes = ms.ToArray();
            string result = Encoding.UTF8.GetString(bytes, 0, bytes.Length);
            return result;
        }
  
        /// <summary>
        /// 从xml字符串给Person实例属性赋值
        /// </summary>
        /// <param name="xmlString"></param>
        public void FromXmlString(string xmlString) 
        {
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xmlString));
            XmlReader reader = XmlReader.Create(ms);
  
             
            reader.Read();
            reader.ReadStartElement("data");
                reader.ReadStartElement("person");
                    string nameType = reader.GetAttribute("type");
                    string nameValue = reader.ReadElementContentAsString();
                    string ageType = reader.GetAttribute("type");
                    int ageValue = reader.ReadElementContentAsInt();
                reader.ReadEndElement();
            reader.ReadEndElement();
            reader.Close();
  
            this._name = nameValue;
            this._age = ageValue;
              
  
        }
  
          
    }
}

XmlWriter/XmlReader示例代码的更多相关文章

  1. 基于DotNetOpenAuth的OAuth实现示例代码: 获取access token

    1. 场景 根据OAuth 2.0规范,该场景发生于下面的流程图中的(D)(E)节点,根据已经得到的authorization code获取access token. 2. 实现环境 DotNetOp ...

  2. 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题

    调用同步锁的wait().notify().notifyAll()进行线程通信 看这个经典的存取款问题,要求两个线程存款,两个线程取款,账户里有余额的时候只能取款,没余额的时候只能存款,存取款金额相同 ...

  3. ActiveMQ笔记(1):编译、安装、示例代码

    一.编译 虽然ActiveMQ提供了发布版本,但是建议同学们自己下载源代码编译,以后万一有坑,还可以尝试自己改改源码. 1.1 https://github.com/apache/activemq/r ...

  4. C#微信公众平台接入示例代码

    http://mp.weixin.qq.com/wiki/17/2d4265491f12608cd170a95559800f2d.html 这是微信公众平台提供的接入指南.官网只提供了php的示例代码 ...

  5. 编译opengl编程指南第八版示例代码通过

    最近在编译opengl编程指南第八版的示例代码,如下 #include <iostream> #include "vgl.h" #include "LoadS ...

  6. 股票数据调用示例代码php

    <!--?php // +---------------------------------------------------------------------- // | JuhePHP ...

  7. php示例代码之类似于C#中的String.Format方法

    php示例代码之类似于C#中的String.Format方法 原文来自于  http://stackoverflow.com/questions/1241177/c-string-format-equ ...

  8. redis 学习笔记(2)-client端示例代码

    redis提供了几乎所有主流语言的client,java中主要使用二种:Jedis与Redisson 一.Jedis的使用 <dependency> <groupId>redi ...

  9. 正则表达式学习笔记(附:Java版示例代码)

    具体学习推荐:正则表达式30分钟入门教程 .         除换行符以外的任意字符\w      word,正常字符,可以当做变量名的,字母.数字.下划线.汉字\s        space,空白符 ...

随机推荐

  1. AngularJS开发指南10:AngularJS依赖注入的详解

    依赖注入是一种软件设计模式,用来处理代码的依赖关系. 一般来说有三种方法让函数获得它需要的依赖: 它的依赖是能被创建的,一般用new操作符就行. 能够通过全局变量查找依赖. 依赖能在需要时被导入. 前 ...

  2. Python学习日记

    江林楠学习了一下午后给大家呈现的20分钟速成Python—— 一些基本的语法:1.python无变量声明 直接a = []即可.2.python为对齐语言,用制表符表示语句块的嵌套.3.python语 ...

  3. 【转】Oracle之物化视图

    原文地址:http://www.cnblogs.com/Ronger/archive/2012/03/28/2420962.html 物化视图是一种特殊的物理表,“物化”(Materialized)视 ...

  4. OC基础--构造方法

    OC语言中类的构造方法学了两种: 一.方法一:[类名 new] 例:[Person new] 缺点:可扩展性不强,假如在Person类中有_age 成员变量,在初始化时想让_age 中的值为20,ne ...

  5. sphinx在c#.net平台下使用(一)

    Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个可以结合MySQL,PostgreSQL全文检索引擎.意图为其他应用提供高速.低空间占用.高结果 相关度的全文搜索功能.是做站内全文搜 ...

  6. BZOJ-3227 红黑树(tree) 树形DP

    个人认为比较好的(高端)树形DP,也有可能是人傻 3227: [Sdoi2008]红黑树(tree) Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1 ...

  7. java判断list为空

    isEmpty()判断有没有元素而size()返回有几个元素 list.isEmpty()和list.size()==0 没有区别 list!=null跟!list.isEmpty()有什么区别? 这 ...

  8. loadrunner获取Http信息头中指定值作为参数

    ); //web_save_header(RESPONSE,"response header"); //web_save_header(REQUEST,"request ...

  9. if,switch,do,while,for实例

    1.#include <stdio.h>void f1(int i){    if( i < 6 )    {        printf("Failed!\n" ...

  10. Spring学习1-初识Spring

    一.简介   1.Spring是一个开源的控制反转(Inversion of Control ,IoC)和面向切面(AOP)的容器框架.它的主要目得是简化企业开发.  2.为何要使用Spring?   ...