对象的序列化与反序列化,以xml,二进制流的方式,soap方式序列化对象

 

System.Runtime.Serialization.Formatters.Soap 命名空间包含SoapFormatter 类,该类用于以SOAP 格式将对象序列化和反序列化。
生成使用此命名空间中的类型的应用程序时,必须引用System.Runtime.Serialization.Formatters.Soap.dll 程序集。

 

using System;
using System.Drawing;
using System.Collections;
using System.Windows.Forms;
using System.Data;
using System.Xml;
using System.IO;
using System.Text;
using System.Xml.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;




namespace Serialization
...{ 
    

    [Serializable]
    public class Car
    ...{
        private string _Price;
        private string _Owner;
        private string m_filename;

        [XmlElement(ElementName = "Price")]
        public string Price
        ...{
            get ...{ return this._Price; }
            set ...{ this._Price = value; }
        }

        [XmlElement(ElementName = "Owner")]
        public string Owner
        ...{
            get ...{ return this._Owner; }
            set ...{ this._Owner = value; }
        }

        public string Filename
        ...{
            get
            ...{
                return m_filename;
            }
            set
            ...{
                m_filename=value;
            }
        }

        public Car(string o, string p)
        ...{
            this.Price = p;
            this.Owner = o;
        }


    }


    public class  cxySerialize  
    ...{   
        /**//// <summary>
        /// 序列化为对象
        /// </summary>
        /// <param name="objname"></param>
        /// <param name="obj"></param>
        public static void BinarySerialize(string objname,object obj)
        ...{
            try
            ...{
                
                string filename=objname+".bin";
                if(System.IO.File.Exists(filename))
                    System.IO.File.Delete(filename);
                FileStream fileStream = new FileStream(filename, FileMode.Create);
                // 用二进制格式序列化
                BinaryFormatter binaryFormatter = new BinaryFormatter();
                binaryFormatter.Serialize(fileStream, obj);
                fileStream.Close(); 
            }
            catch(Exception ex)
            ...{
                MessageBox.Show(ex.Source);
            }
        }

        /**//// <summary>
        /// 从二进制文件中反序列化
        /// </summary>
        /// <param name="objname"></param>
        /// <returns></returns>
        public static object BinaryDeserialize(string objname)
        ...{
            System.Runtime.Serialization.IFormatter formatter = new BinaryFormatter();
            //二进制格式反序列化
            string filename=objname+".bin";
            if(!System.IO.File.Exists(filename))
                throw new Exception("对反序列化之前,请先序列化");
            Stream stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
            object obj = formatter.Deserialize(stream);
            stream.Close();
            return obj;
        }

        /**//// <summary>
        /// 序列化为soap 即xml
        /// </summary>
        /// <param name="objname"></param>
        /// <returns></returns>
        public static void SoapSerialize(string objname,object obj)
        ...{
            try
            ...{  
                string filename=objname+".Soap";
                if(System.IO.File.Exists(filename))
                    System.IO.File.Delete(filename);
                FileStream fileStream = new FileStream(filename, FileMode.Create);
                // 序列化为Soap
                SoapFormatter formatter = new SoapFormatter();
                formatter.Serialize(fileStream, obj);
                fileStream.Close();

            }
            catch(Exception ex)
            ...{
                MessageBox.Show(ex.Source);
            }
        }


        /**//// <summary>
        /// 反序列号对象
        /// </summary>
        /// <param name="objname"></param>
        public static object SoapDeserialize(string objname)
        ...{

            System.Runtime.Serialization.IFormatter formatter = new SoapFormatter();
            string filename=objname+".Soap";
            //Soap格式反序列化
            Stream stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
            object obj = formatter.Deserialize(stream);
            stream.Close();
            return obj;
        }

        public static void XmlSerialize(string objname,object obj)
        ...{
             
            try
            ...{
                string filename=objname+".xml";
                if(System.IO.File.Exists(filename))
                    System.IO.File.Delete(filename);
                FileStream fileStream = new FileStream(filename, FileMode.Create);
                // 序列化为xml
                SoapFormatter formatter = new SoapFormatter();
                formatter.Serialize(fileStream, obj);
                fileStream.Close(); 
            }
            catch(Exception ex)
            ...{
                MessageBox.Show(ex.Message);
            }

        }


        /**//// <summary>
        /// 从xml序列中反序列化
        /// </summary>
        /// <param name="objname"></param>
        /// <returns></returns>
        public static object XmlDeserailize(string objname)
        ...{ 
            System.Runtime.Serialization.IFormatter formatter = new SoapFormatter();
            string filename=objname+".xml";
            //Xml格式反序列化
            Stream stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
            object obj = formatter.Deserialize(stream);
            stream.Close();
            return obj; 
        }

    
     
    }   


}

 

时间: 2024-07-28 17:51:39

对象的序列化与反序列化,以xml,二进制流的方式,soap方式序列化对象的相关文章

JavaScript对象也玩序列化和反序列化[转]

from:http://blog.csdn.net/yunlaiyunqu/archive/2006/03/18/628290.aspx JavaScript对象也玩序列化和反序列化      前些天说过关于JavaScript的Literal Syntax问题,觉得挺有意思的,于是又研究了一下,能不能把对象再转化为Literal形式呢?就像我们平时说的序列化和反序列化啥的.当然可以了,因为JavaScript对象自身都提供了一个toString()方法,默认就是返回简单对象的Literal形式

Windows 8 Store Apps学习(60) 通信: 获取网络信息, 序列化和反序列化

介绍 重新想象 Windows 8 Store Apps 之 通信 获取网络信息 序列化 - json 序列化 - xml 序列化 - rss atom 示例 1.演示如何获取网络的相关信息 Communication/NetworkInfo.xaml.cs /* * 演示如何获取网络的相关信息 */ using System; using System.Collections.Generic; using Windows.Networking.Connectivity; using Windo

序列化和反序列化的几种方式(DataContractSerializer)(二)

DataContractSerializer 类      使用提供的数据协定,将类型实例序列化和反序列化为 XML 流或文档. 无法继承此类. 命名空间: System.Runtime.Serialization程序集:  System.Runtime.Serialization(在 System.Runtime.Serialization.dll 中) 备注      使用 DataContractSerializer 类可以将类型实例序列化和反序列化为 XML 流或文档. 通过将 Data

重新想象 Windows 8 Store Apps (60) - 通信: 获取网络信息, 序列化和反序列化

原文:重新想象 Windows 8 Store Apps (60) - 通信: 获取网络信息, 序列化和反序列化 [源码下载] 重新想象 Windows 8 Store Apps (60) - 通信: 获取网络信息, 序列化和反序列化 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 通信 获取网络信息 序列化 - json 序列化 - xml 序列化 - rss atom 示例1.演示如何获取网络的相关信息Communication/NetworkInfo.xa

Java序列化和反序列化(未完成,待8.27更新)

序列化:Java对象转换为字节序列 反序列化:字节序列转换为Java对象 实现了Serializable或Externalnalizable接口的接口或类,通过ObjectInputStream或ObjectOutputStream可以进行二进制文件与Java对象之间的转换. Serializable 实现了Serializable的对象,可以将该对象的非transient的实例变量进行序列化或反序列化. 若重写了 readObject(ObjectInputStream in) 和 write

.NET对象的XML序列化和反序列化

 序列化的概念 序列化是指一个对象的实例可以被保存,保存成一个二进制串,当然,一旦被保存成二进制串,那么也可以保存成文本串了.比如,一个计数器,数值为2,我们可以用字符串"2"表示.如果有个对象,叫做connter,当前值为2,那么可以序列化成"2",反向的,也可以从"2"得到值为2的计数器实例.这样,关机时序列化它,开机时反序列化它,每次开机都是延续的.不会都是从头开始. 序列化概念的提出和实现,可以使我们的应用程序的设置信息保存和读取更加方便

XmlSerializer 对象的Xml序列化和反序列化

try { XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("my", "http://flibble"); Workers workers = new Workers(); workers.MyWorkers = new Worker[] { new Worker() { Name = "1", Number = 1 }, new Worker() { Nam

C#实现对象的Xml格式序列化及反序列化

xml|对象   要序列化的对象的类: [Serializable]public class Person{private string name;public string Name{get{return name;}set{name=value;}}public string Sex;public int Age=31;public Course[] Courses; public Person(){}public Person(string Name){name=Name;Sex="男&q

二进制流“0”不包含有效的 BinaryHeader。这可能是由于无效流,或由于在序列化和反序列化之间的对象版本更改

问题描述 二进制流"0"不包含有效的BinaryHeader.这可能是由于无效流,或由于在序列化和反序列化之间的对象版本更改怎么解决啊 解决方案 解决方案二:可能解析这个流的软件需要一个BinaryHeader,也就是流中前几个对于内容来说无用的,只是用来说明流类型的byte[]解决方案三:不是很明白.能说的清除些吗?解决方案四:code?解决方案五:取单步跟踪你的代码,答案就在其中解决方案六:兄弟这个问题解决了吗,能给点提示不,我现在也遇到这个问题