.net的XML对象序列化VS WCF中xml序列化问题

整理一下 .net 对象序列化注意事项:

1. 字段:必须是 public类型

2.属性:只读或者只写的属性不被序列化,只有 可读可写并且赋值的才可以

序列化:

Someclass obj = new SomeClass();

XmlSerializer ser = new XmlSerializer(typeof(Someclass));

StreamWriter writer = new StreamWriter("ser.xml");

ser.Serialize(writer, obj);

writer.Close();

 

反序列化

FileStream fs = new FileStream("ser.xml", FileMode.Open);

Someclass newObj = (Someclass)ser.Deserialize(fs);

fs.Close(); 

对于数组亦可,只需将SomeClass换成SomeClass[]即可。

 

关于在WCF中的序列化

json:DataContractJsonSerializer支持使用以JavaScript 对象标记作为序列化格式

using System.Runtime.Serialization.Json;

Employee e = new Employee(101, "Daniel", "Dong");
            FileStream writer = new FileStream("sample.xml", FileMode.Create);
            DataContractJsonSerilizer ser = new DataContractJsonSerilizer(typeof(Employee));
            ser.Serialize(writer, e);
            writer.Close();
View Code

 

序列化Employee类的结果

{"Employee":101, "FirstName":"Daniel", "LastName":"Dong"}

 

 

 

xml: 主要讲两种

 DataContractSerializer(作为默认的序列化基础方法因为它是WCF的初始序列化结构)、

XmlSerializer(如果你需要支持已有的类型或者自定义序列化而且它们不被DataContractSerializer支持的话,你可能想要使用XmlSerializer.)

 

Demo: xmlSerializer

 using System.Xml.Serialization;

 

using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Xml;
 using System.Xml.Serialization;
 using System.Diagnostics;
 
 namespace Chinaer.WcfDemo.ConsoleClient
 {
     class Program
     {
         static void Main(string[] args)
         {
             
             
             Person person = new Person()
             {
                 Age = 12,
                 UserPwd = "21",
                 UserName = "郭志奇",
                 Date = DateTime.Now
             };
           
             using (XmlWriter writer = new XmlTextWriter("person.xml", Encoding.UTF8))
             {
                 XmlSerializer serializer = new XmlSerializer(typeof(Person));
                 serializer.Serialize(writer, person);
             }
 
             Process.Start("person.xml");
             Console.Read();
         }
 
         /// <summary>
         /// 序列化方法
         /// </summary>
         /// <typeparam name="T"></typeparam>
         /// <param name="instace"></param>
         /// <param name="fileName"></param>
         public static void Serialize<T>(T instace, string fileName)
         {
             using (XmlWriter writer = new XmlTextWriter(fileName, Encoding.UTF8))
             {
                 XmlSerializer serializer = new XmlSerializer(typeof(T));
                 serializer.Serialize(writer, instace);
             }
             Process.Start(fileName);
         }
     }
     [XmlRoot(ElementName="guozhiqi",Namespace="http://www.guozhiqi.com")]
     /// <summary>
     /// 定义一个实体类 Person
     /// </summary>
     public class Person
     {
         private Guid _id;
 
         private DateTime _date;
         //注意我们没有默认的构造函数
         internal double Age { get; set; } //私有字段 年龄
         /// <summary>
         /// 通过XmlAttributeAttribute 序列化成xml属性
         /// </summary>
         [XmlAttribute(AttributeName="GuidID",Namespace="http://guidID")]
         public Guid ID
         {
             get { return _id; }
             set
             {
                 _id = value;
             }
         } //公有的随机数
         [XmlElement(ElementName="DateTime",Namespace="http://date")]
         public DateTime Date
         {
             set
             {
                 _date = value;
             }
             get
             {
                 return _date;
             }
         }
 
         public string UserName { get; set; }
 
         public string UserPwd { get; set; }
         public Person() { }
         public Person(double age, Guid id)
         {
             this.Age = age;
 
         }
     }
 
 }
View Code

 

序列化结果:

<?xml version="1.0" encoding="utf-8"?>

<guozhiqi xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xmlns:xsd="http://www.w3.org/2001/XMLSchema"

 d1p1:GuidID="00000000-0000-0000-0000-000000000000" 
xmlns:d1p1="http://guidID" xmlns="http://www.guozhiqi.com">
<DateTime xmlns="http://date">2013-03-21T23:31:13.8584896+08:00</DateTime>
<UserName>郭志奇</UserName><UserPwd>21</UserPwd></guozhiqi>
View Code

 

 

注意:xmlSerializer,对字段、属性序列化 遵循.net 序列化规则,字段是public,属性是可读可写,并且我们还也可以指定名称及命名空间

参考:

tks:

http://blog.sina.com.cn/s/blog_6f6769b50100z32v.html

http://www.cnblogs.com/jiagoushi/archive/2013/03/21/2974523.html

http://www.cnblogs.com/danielWise/archive/2010/12/17/1909537.html

posted @ 2013-06-18 20:23  365lei  阅读(371)  评论(0编辑  收藏  举报