zoukankan      html  css  js  c++  java
  • .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

  • 相关阅读:
    java.lang.RuntimeException: HRegionServer Aborted的问题
    Solr 读数据流程
    Solr 写数据流程
    solr索引创建流程
    Solr 倒排索引
    Solr 核心组成
    Solr的关键特性
    poj3308 Paratroopers --- 最小点权覆盖-&gt;最小割
    YII 路由配置
    MySQL具体解释(5)-----------函数超全总结
  • 原文地址:https://www.cnblogs.com/lei2007/p/3142978.html
Copyright © 2011-2022 走看看