zoukankan      html  css  js  c++  java
  • .NET对象序列化的几种方式

    设有对象:

    代码
    public class Person
        {
            
    public string Name
            {           
                
    getset;       
            }
            
    public int Age
            {
                
    getset;
            }
            
    public string Address
            {
                
    getset;
            }
        }
      Person p 
    = new Person{Name = "McJeremy",Age = 25, Address = "ShenZhen"};

    现在使用以下几种方式对其序列化: 

    1、使用 BinaryFormatter

    代码
    FileStream fs = new FileStream(@"D:/person.txt", FileMode.OpenOrCreate, FileAccess.Write);
                BinaryFormatter bf 
    = new BinaryFormatter();
                
    try
                {
                    bf.Serialize(fs, p);
    //反序列化 object obj=bf.Deserialize(fs)
                    fs.Close();
                }
                
    catch
                {
                }

    2、使用XmlSerializer

    代码
    FileStream fs = new FileStream(@"D:/person.xml", FileMode.OpenOrCreate, FileAccess.Write);
                XmlSerializer xs 
    = new XmlSerializer(typeof(Person));
                
    try
                {
                    xs.Serialize(fs, p);
                    
    //反序列化 object obj=xs.Deserialize(fs)
                    fs.Close();
                }
                
    catch
                {
                }

    序列化结果:

    代码
    <?xml version="1.0"?>
    <Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      
    <Name>Xu</Name>
      
    <Age>25</Age>
      
    <Address>ShenZhen</Address>
    </Person>

    /***使用DataContract及DataContractJson时,需要在Person类及其属性上添加DataContract&&DataMember属性,如下:

    代码
    [DataContract]
        
    public class Person
        {
            [DataMember(Order
    =1)]
            
    public string Name
            {
                
    get;
                
    set;
            }
            [DataMember(Order 
    = 2)]
            
    public int Age
            {
                
    get;
                
    set;
            }
            [DataMember(Order 
    = 3)]
            
    public string Address
            {
                
    get;
                
    set;
            }
        } 

    3、使用DataContractSerializer(结果存为xml格式 )

    代码
     using (FileStream fs = new FileStream(@"D:/person_DataContract.xml", FileMode.OpenOrCreate, FileAccess.Write))
                {
                    DataContractSerializer ds 
    = new DataContractSerializer(typeof(Person));
                    ds.WriteObject(fs, p);
                }

    //结果:
     <Person xmlns="http://schemas.datacontract.org/2004/07/ConsoleApplication1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><Name>Xu</Name><Age>25</Age><Address>ShenZhen</Address></Person>

    4、在System.ServiceModel.web.dll中,还有个DataContractJsonSerializer,结果存为Json格式

    代码
     using (FileStream fs = new FileStream(@"D:/person_DataContractJson.txt", FileMode.OpenOrCreate, FileAccess.Write))
                {
                    DataContractJsonSerializer ds 
    = new DataContractJsonSerializer(typeof(Person));
                    ds.WriteObject(fs, p);
                }
    //结果:
    {"Name":"McJeremy","Age":25,"Address":"ShenZhen"}
  • 相关阅读:
    算法学习概述(2016.6)
    java异常和错误类总结(2016.5)
    java string 细节原理分析(2016.5)
    MySQL 5.7.18 解压版安装
    Struts2的<s:date>标签使用详解[转]
    jprofile查看hprof文件[转]
    iBatis的Settings节点参数详解[转]
    window.open、window.showModalDialog和window.showModelessDialog 的区别[转]
    oracle 字典表查询
    oracle 表空间操作
  • 原文地址:https://www.cnblogs.com/McJeremy/p/1687048.html
Copyright © 2011-2022 走看看