C#编程总结(一)序列化总结

序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。

几种序列化技术:

1)二进制序列化保持类型保真度,这对于在应用程序的不同调用之间保留对象的状态很有用。例如,通过将对象序列化到剪贴板,可在不同的应用程序之间共享对象。您可以将对象序列化到流、磁盘、内存和网络等等。远程处理使用序列化“通过值”在计算机或应用程序域之间传递对象。

2)XML 序列化仅序列化公共属性和字段,且不保持类型保真度。当您要提供或使用数据而不限制使用该数据的应用程序时,这一点是很有用的。由于 XML 是一个开放式标准,因此,对于通过 Web 共享数据而言,这是一个很好的选择。SOAP 同样是一个开放式标准,这使它也成为一个颇具吸引力的选择。

3)使用提供的数据协定,将类型实例序列化和反序列化为 XML 流或文档(或者JSON格式)。常应用于WCF通信。

BinaryFormatter

序列化可被定义为将对象的状态存储到存储媒介中的过程。在此过程中,对象的公共字段和私有字段以及类的名称(包括包含该类的程序集)都被转换为字节流,然后写入数据流。在以后反序列化该对象时,创建原始对象的精确复本。

1、使一个类可序列化的最简单方式是按如下所示使用 Serializable 属性标记。

2、有选择的序列化

通过用 NonSerialized 属性标记成员变量,可以防止它们被序列化

3、自定义序列化

1) 在序列化期间和之后运行自定义方法

最佳做法也是最简单的方法(在 .Net Framework 2.0 版中引入),就是在序列化期间和之后将下列属性应用于用于更正数据的方法:

  • OnDeserializedAttribute
  • OnDeserializingAttribute
  • OnSerializedAttribute
  • OnSerializingAttribute

具体事例如下:

// This is the object that will be serialized and deserialized.
[Serializable()]
public class TestSimpleObject
{
  // This member is serialized and deserialized with no change.
  public int member1;

  // The value of this field is set and reset during and
  // after serialization.
  private string member2;

  // This field is not serialized. The OnDeserializedAttribute
  // is used to set the member value after serialization.
  [NonSerialized()]
  public string member3; 

  // This field is set to null, but populated after deserialization.
  private string member4;

  // Constructor for the class.
  public TestSimpleObject()
  {
    member1 = 11;
    member2 = "Hello World!";
    member3 = "This is a nonserialized value";
    member4 = null;
  }

  public void Print()
  {
    Console.WriteLine("member1 = '{0}'", member1);
    Console.WriteLine("member2 = '{0}'", member2);
    Console.WriteLine("member3 = '{0}'", member3);
    Console.WriteLine("member4 = '{0}'", member4);
  }

  [OnSerializing()]
  internal void OnSerializingMethod(StreamingContext context)
  {
    member2 = "This value went into the data file during serialization.";
  }

  [OnSerialized()]
  internal void OnSerializedMethod(StreamingContext context)
  {
    member2 = "This value was reset after serialization.";
  }

  [OnDeserializing()]
  internal void OnDeserializingMethod(StreamingContext context)
  {
    member3 = "This value was set during deserialization";
  }

  [OnDeserialized()]
  internal void OnDeserializedMethod(StreamingContext context)
  {
    member4 = "This value was set after deserialization.";
  }
}

2) 实现 ISerializable 接口

对于用 Serializable 属性标记且在类级别上或其构造函数上具有声明性或命令性安全的类,不应使用默认序列化。相反,这些类应始终实现 ISerializable 接口。实现 ISerializable 涉及实现 GetObjectData 方法以及在反序列化对象时使用的特殊构造函数。

具体实例如下:

[Serializable]
public class MyObject : ISerializable
{
 public int n1;
 public int n2;
 public String str;

 public MyObject()
 {
 }

 protected MyObject(SerializationInfo info, StreamingContext context)
 {
  n1 = info.GetInt32("i");
  n2 = info.GetInt32("j");
  str = info.GetString("k");
 }
[SecurityPermissionAttribute(SecurityAction.Demand,SerializationFormatter
=true)]
 public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
 {
  info.AddValue("i", n1);
  info.AddValue("j", n2);
  info.AddValue("k", str);
 }
}

注意:

在反序列化一个对象时不调用构造函数。出于性能方面的原因对反序列化施加了该约束。但是,这违反了运行库与对象编写器之间的一些通常约定,开发人员应确保他们在将对象标记为可序列化时了解其后果。

SoapFormatter

以 SOAP 格式将对象或整个连接对象的图形序列化和反序列化。基本用法类似于BinaryFormatter。SoapFormatter 和 BinaryFormatter 两个类实现 IRemotingFormatter 接口以支持远程过程调用 (RPC),实现 IFormatter 接口(由 IRemotingFormatter 继承)以支持对象图形的序列化。SoapFormatter 类还支持对 ISoapMessage 对象进行 RPC,而不必使用 IRemotingFormatter 功能。

XmlSerializer

将对象序列化到 XML 文档中和从 XML 文档中反序列化对象。XmlSerializer 使您得以控制如何将对象编码到 XML 中。

XML 序列化是将对象的公共属性 (Property) 和字段转换为序列格式(这里是指 XML)以便存储或传输的过程。反序列化则是从 XML 输出中重新创建原始状态的对象。因此,可以将序列化视为将对象的状态保存到流或缓冲区的方法。例如,ASP.NET 使用 XmlSerializer 类对 XML Web services 消息进行编码。

例子:

C#代码

public class MyClass
{
  public MyObject MyObjectProperty;
}
public class MyObject
{
  public string ObjectName;
}

序列化后的XML  

<MyClass>
 <MyObjectProperty>
 <ObjectName>My String</ObjectName>
 </MyObjectProperty>
</MyClass>

还可以通过标记来控制XML的输出

1、默认值

DefaultValueAttribute

2、过滤某属性或字段

XmlIgnoreAttribute

3、重写默认序列化逻辑

具体可见:http://msdn.microsoft.com/zh-cn/library/system.xml.serialization.xmlattributeoverrides(v=vs.80).aspx

其他控制手段,具体可见http://msdn.microsoft.com/zh-cn/library/83y7df3e(v=vs.80).aspx

4、将对象序列化为 SOAP 编码的 XML 流

http://msdn.microsoft.com/zh-cn/library/bd04skah(v=vs.80).aspx

注意

XML 序列化不转换方法、索引器、私有字段或只读属性(只读集合除外)。要序列化对象的所有字段和属性(公共的和私有的),请使用 BinaryFormatter,而不要使用 XML 序列化。

DataContractSerializer

使用提供的数据协定,将类型实例序列化和反序列化为 XML 流或文档。 此类不能被继承。

DataContractSerializer 用于序列化和反序列化在 Windows Communication Foundation (WCF) 消息中发送的数据。 通过将 DataContractAttribute 属性 (Attribute) 应用于类,而将 DataMemberAttribute 属性 (Attribute) 应用于类成员,可以指定要序列化的属性 (Property) 和字段。

使用步骤:

1)DataContractSerializer 与 DataContractAttribute 和 DataMemberAttribute 类结合使用。

要准备序列化某个类,请将 DataContractAttribute 应用于该类。 对于返回要序列化的数据的类的每个成员,请应用 DataMemberAttribute。 您可以序列化字段和属性,而无论其可访问性级别是什么:private、protected、internal、protected internal 或 public。

2)添加到已知类型的集合中

在序列化或反序列化对象时,DataContractSerializer 必须“已知”该类型。 首先,创建一个实现 IEnumerable<T>(如 List<T>)的类实例,并将已知类型添加到集合中。 然后,使用接受 IEnumerable<T>(例如,[M:System.Runtime.Serialization.DataContractSerializer.#ctor(System.Type,System.Collections.Generic.IEnumerable{System.Type}])的重载之一创建 DataContractSerializer 的实例。

具体实例:

namespace DataContractSerializerExample
{
  using System;
  using System.Collections;
  using System.Collections.Generic;
  using System.Runtime.Serialization;
  using System.Xml;

  // You must apply a DataContractAttribute or SerializableAttribute
  // to a class to have it serialized by the DataContractSerializer.
  [DataContract(Name = "Customer", Namespace = "http://www.contoso.com")]
  class Person : IExtensibleDataObject
  {
    [DataMember()]
    public string FirstName;
    [DataMember]
    public string LastName;
    [DataMember()]
    public int ID;

    public Person(string newfName, string newLName, int newID)
    {
      FirstName = newfName;
      LastName = newLName;
      ID = newID;
    }

    private ExtensionDataObject extensionData_Value;

    public ExtensionDataObject ExtensionData
    {
      get
      {
        return extensionData_Value;
      }
      set
      {
        extensionData_Value = value;
      }
    }
  }

  public sealed class Test
  {
    private Test() { }

    public static void Main()
    {
      try
      {
        WriteObject("DataContractSerializerExample.xml");
        ReadObject("DataContractSerializerExample.xml");

      }

      catch (SerializationException serExc)
      {
        Console.WriteLine("Serialization Failed");
        Console.WriteLine(serExc.Message);
      }
      catch (Exception exc)
      {
        Console.WriteLine(
        "The serialization operation failed: {0} StackTrace: {1}",
        exc.Message, exc.StackTrace);
      }

      finally
      {
        Console.WriteLine("Press <Enter> to exit....");
        Console.ReadLine();
      }
    }

    public static void WriteObject(string fileName)
    {
      Console.WriteLine(
        "Creating a Person object and serializing it.");
      Person p1 = new Person("Zighetti", "Barbara", 101);
      FileStream writer = new FileStream(fileName, FileMode.Create);
      DataContractSerializer ser =
        new DataContractSerializer(typeof(Person));
      ser.WriteObject(writer, p1);
      writer.Close();
    }

    public static void ReadObject(string fileName)
    {
      Console.WriteLine("Deserializing an instance of the object.");
      FileStream fs = new FileStream(fileName,
      FileMode.Open);
      XmlDictionaryReader reader =
        XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
      DataContractSerializer ser = new DataContractSerializer(typeof(Person));

      // Deserialize the data and read it from the instance.
      Person deserializedPerson =
        (Person)ser.ReadObject(reader, true);
      reader.Close();
      fs.Close();
      Console.WriteLine(String.Format("{0} {1}, ID: {2}",
      deserializedPerson.FirstName, deserializedPerson.LastName,
      deserializedPerson.ID));
    }
  }

DataContractJsonSerializer

将对象序列化为 JavaScript 对象表示法 (JSON),并将 JSON 数据反序列化为对象。 此类不能被继承。

具体使用与DataContractSerializer类似。这里不再赘述。

下面对这些方法的使用做了汇总,希望能给大家带来一些帮助。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;
using System.Xml.Serialization;

namespace SerializerSample
{
  /// <summary>
  /// 序列化帮助类
  /// </summary>
  public sealed class SerializeHelper
  {
    #region DataContract序列化
    /// <summary>
    /// DataContract序列化
    /// </summary>
    /// <param name="value"></param>
    /// <param name="knownTypes"></param>
    /// <returns></returns>
    public static string SerializeDataContract(object value, List<Type> knownTypes = null)
    {
      DataContractSerializer dataContractSerializer = new DataContractSerializer(value.GetType(), knownTypes);

      using (MemoryStream ms = new MemoryStream())
      {
        dataContractSerializer.WriteObject(ms, value);
        ms.Seek(0, SeekOrigin.Begin);
        using (StreamReader sr = new StreamReader(ms))
        {
          return sr.ReadToEnd();
        }
      }
    }
    /// <summary>
    /// DataContract反序列化
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="xml"></param>
    /// <returns></returns>
    public static T DeserializeDataContract<T>(string xml)
    {
      using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
      {
        DataContractSerializer serializer = new DataContractSerializer(typeof(T));
        return (T)serializer.ReadObject(ms);
      }
    }
    #endregion

    #region DataContractJson序列化
    /// <summary>
    /// DataContractJson序列化
    /// </summary>
    /// <param name="value"></param>
    /// <returns></returns>
    public static string SerializeDataContractJson(object value)
    {
      DataContractJsonSerializer dataContractSerializer = new DataContractJsonSerializer(value.GetType());
      using (MemoryStream ms = new MemoryStream())
      {
        dataContractSerializer.WriteObject(ms, value);
        return Encoding.UTF8.GetString(ms.ToArray());
      }
    }
    /// <summary>
    /// DataContractJson反序列化
    /// </summary>
    /// <param name="type"></param>
    /// <param name="str"></param>
    /// <returns></returns>
    public static object DeserializeDataContractJson(Type type, string str)
    {
      DataContractJsonSerializer dataContractSerializer = new DataContractJsonSerializer(type);
      using (MemoryStream ms = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(str)))
      {
        return dataContractSerializer.ReadObject(ms);
      }
    }
    /// <summary>
    /// DataContractJson反序列化
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="json"></param>
    /// <returns></returns>
    public T DeserializeDataContractJson<T>(string json)
    {
      DataContractJsonSerializer dataContractSerializer = new DataContractJsonSerializer(typeof(T));
      using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
      {
        return (T)dataContractSerializer.ReadObject(ms);
      }
    }
    #endregion

    #region XmlSerializer序列化
    /// <summary>
    /// 将对象序列化到 XML 文档中和从 XML 文档中反序列化对象。XmlSerializer 使您得以控制如何将对象编码到 XML 中。
    /// </summary>
    /// <param name="value"></param>
    /// <returns></returns>
    public static string SerializeXml(object value)
    {
      XmlSerializer serializer = new XmlSerializer(value.GetType());
      using (MemoryStream ms = new MemoryStream())
      {
        serializer.Serialize(ms, value);
        ms.Seek(0, SeekOrigin.Begin);
        using (StreamReader sr = new StreamReader(ms))
        {
          return sr.ReadToEnd();
        }
      }
    }
    /// <summary>
    /// XmlSerializer反序列化
    /// </summary>
    /// <param name="type"></param>
    /// <param name="str"></param>
    /// <returns></returns>
    public static object DeserializeXml(Type type, string str)
    {
      XmlSerializer serializer = new XmlSerializer(type);
      byte[] bytes = System.Text.Encoding.UTF8.GetBytes(str);
      using (MemoryStream ms = new MemoryStream(bytes))
      {
        return serializer.Deserialize(ms);
      }
    }
    #endregion

    #region BinaryFormatter序列化
    /// <summary>
    /// BinaryFormatter序列化
    /// 必须类型必须标记为Serializable
    /// </summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    public static string SerializeBinaryFormatter(object obj)
    {
      BinaryFormatter formatter = new BinaryFormatter();
      using (MemoryStream ms = new MemoryStream())
      {
        formatter.Serialize(ms,obj);
        byte[] bytes = ms.ToArray();
        obj = formatter.Deserialize(new MemoryStream(bytes));
        //如果是UTF8格式,则反序列化报错。可以用Default格式,不过,建议还是传参为byte数组比较好
        return Encoding.Default.GetString(bytes);
      }
    }

    /// <summary>
    /// BinaryFormatter反序列化
    /// 必须类型必须标记为Serializable
    /// </summary>
    /// <param name="serializedStr"></param>
    /// <returns></returns>
    public static T DeserializeBinaryFormatter<T>(string serializedStr)
    {
      BinaryFormatter formatter = new BinaryFormatter();
      byte[] bytes = Encoding.Default.GetBytes(serializedStr);
      using (MemoryStream ms = new MemoryStream(bytes))
      {
        return (T)formatter.Deserialize(ms);
      }
    }
    #endregion 

    #region SoapFormatter序列化
    /// <summary>
    /// SoapFormatter序列化
    /// 必须类型必须标记为Serializable
    /// </summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    public static string SerializeSoapFormatter(object obj)
    {
      SoapFormatter formatter = new SoapFormatter();
      using (MemoryStream ms = new MemoryStream())
      {
        formatter.Serialize(ms, obj);
        byte[] bytes = ms.ToArray();
        return Encoding.UTF8.GetString(bytes);
      }
    }
    /// <summary>
    /// SoapFormatter反序列化
    /// 必须类型必须标记为Serializable
    /// </summary>
    /// <param name="serializedStr"></param>
    /// <returns></returns>
    public static T DeserializeSoapFormatter<T>(string serializedStr)
    {
      SoapFormatter formatter = new SoapFormatter();
      using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(serializedStr)))
      {
        return (T)formatter.Deserialize(ms);
      }
    }
    #endregion
  }
}

具体的实例代码如下:

下载:demo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • c#数据的序列化和反序列化(推荐版)

    开始用的.net 自带的DataContractJsonSerializer进行序列化和反序列化,当代码写完以后,调试,我X(原谅我的脏话,因为确实让我生气),实体因为有[DataContractAttribute(IsReference=true )] 这样一个属性,提示不能序列化,当然手改一下啦,改完以后,提示基类EntityObject 的这个属性不可以 MY God!! 后来也是因为DataContractJsonSerializer 反序列化成集合的时候不好使,所以才下定决心废弃.采用

  • C#序列化与反序列化(Serialize,Deserialize)实例详解

    本文实例讲述了C#序列化与反序列化(Serialize,Deserialize)实现方法.分享给大家供大家参考.具体分析如下: 如果要保存运行程序过程的数据要么保存到数据库中,要么新建一个普通的文件,然后把数据保存进去.但是这两者有个缺点就是,不能把原有数据的结构也保存进去.比如一个类中的字段值保存进去后再读取出来必须再解析下才行.序列化技术让你省去了解析的过程.保存后再读取时直接得到一个class 序列化的方式有三种:BinaryFormatter,SoapFormatter,XmlSeria

  • C#实现Xml序列化与反序列化的方法

    本文实例讲述了C#实现Xml序列化与反序列化的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: /// <summary> /// Xml序列化与反序列化 /// </summary> public class XmlUtil { public static string GetRoot(string xml) {     XmlDocument doc = new XmlDocument();     doc.LoadXml(xml.Replace("

  • C#实现对象XML序列化的方法

    本文实例讲述了C#实现对象XML序列化的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: using system; using system.xml; using system.xml.serialization; using system.text; using system.io; public class util {     /// <summary>     /// 对象序列化成 xml string     /// </summary>     p

  • C# 三种序列化方法分享

    序列化是将一个对象转换成字节流以达到将其长期保存在内存.数据库或文件中的处理过程.它的主要目的是保存对象的状态以便以后需要的时候使用.与其相反的过程叫做反序列化. 序列化一个对象为了序列化一个对象,我们需要一个被序列化的对象,一个容纳被序列化了的对象的(字节)流和一个格式化器.进行序列化之前我们先看看System.Runtime.Serialization名字空间.ISerializable接口允许我们使任何类成为可序列化的类. 如果我们给自己写的类标识[Serializable]特性,我们就能

  • c#对象反序列化与对象序列化示例详解

    1.对象序列化的介绍 (1).NET支持对象序列化的几种方式二进制序列化:对象序列化之后是二进制形式的,通过BinaryFormatter类来实现的,这个类位于System.Runtime.Serialization.Formatters.Binary命名空间下.SOAP序列化:对象序列化之后的结果符合SOAP协议,也就是可以通过SOAP 协议传输,通过System.Runtime.Serialization.Formatters.Soap命名空间下的SoapFormatter类来实现的.XML

  • 深入理解C#序列化与反序列化的详解

    在我们深入探讨C#序列化和反序列化之前我们先要明白什么是序列化,它又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制.序列化就是把一个对象保存到一个文件或数据库字段中去,反序列化就是在适当的时候把这个文件再转化成原来的对象使用.其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方..NET框架提供了两种串行化的方式:1.是使用BinaryFormatter进行串行化:2.使用SoapFormatter进行串行化:3.使用XmlSerializer进行串

  • 深入剖析Java编程中的序列化

    Java提供一种机制叫做序列化,通过有序的格式或者字节序列持久化java对象,其中包含对象的数据,还有对象的类型,和保存在对象中的数据类型. 所以,如果我们已经序列化了一个对象,那么它可以被读取并通过对象的类型和其他信息进行反序列化,并最终获取对象的原型. ObjectInputStream 和 ObjectOutputStream对象是高级别的流对象,包含序列化和反序列化的方法. ObjectOutputStream 拥有很多序列化对象的方法,最常用的是: private void write

  • 详解Java编程中对象的序列化

    1. 什么是Java对象序列化 Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长.但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象.Java对象序列化就能够帮助我们实现该功能. 使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象.必须注意地是,对象序列化保存的是对象的"状态",

  • C#编程总结(一)序列化总结

    序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数据. 几种序列化技术: 1)二进制序列化保持类型保真度,这对于在应用程序的不同调用之间保留对象的状态很有用.例如,通过将对象序列化到剪贴板,可在不同的应用程序之间共享对象.您可以将对象序列化到流.磁盘.内存和网络等等.远程处理使用序列化"通过值"在计算机或应用程序域之间传递对象. 2)XML 序列化仅序列化公共属性和字段,且不保持类型保真度.当您要提供

  • PHP游戏编程25个脚本代码

    清单 1.简单的掷骰器 许多游戏和游戏系统都需要骰子.让我们先从简单的部分入手:掷一个六面骰子.实际上,滚动一个六面骰子就是从 1 到 6 之间选择一个随机数字.在 PHP 中,这十分简单:echo rand(1,6);. 在许多情况下,这基本上很简单.但是在处理机率游戏时,我们需要一些更好的实现.PHP 提供了更好的随机数字生成器:mt_rand().在不深入研究两者差别的情况下,可以认为 mt_rand 是一个更快.更好的随机数字生成器:echo mt_rand(1,6);.如果把该随机数字

  • LINQ to XML的编程基础

    一.LINQ to XML 编程基础 1.LINQ to XML类 System.Xml.Linq命名空间含有19个类,下表列出了它们的名称及其描述: 类 描述 XAttribute 表示一个 XML 属性 XCData 表示一个 CDATA 文本节点 XComment 表示一个 XML 注释 XContainer 适用于可能具有子节点的所有节点的抽象基类 XDeclaration 表示一个 XML 声明 XDocument 表示一个 XML 文档 XDocumentType 表示一个 XML

  • Java编程rabbitMQ实现消息的收发

    java实现rAMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然. AMQP的主要特征是面向消息.队列.路由(包括点对点和发布/订阅).可靠性.安全. RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python.Ruby..NET.Java.JMS.C.PHP.Actio

  • Java对象的XML序列化与反序列化实例解析

    上一篇文章我们介绍了java实现的各种排序算法代码示例,本文我们看看Java对象的xml序列化与反序列化的相关内容,具体如下. XML是一种标准的数据交换规范,可以方便地用于在应用之间交换各类数据.如果能在Java对象和XML文档之间建立某种映射,例如Java对象的XML序列化和反序列化,那么就可以使Java的对象方便地与其他应用进行交换. java.beans包里面有两个类XMLEncoder和Decoder,分别用于将符合JabaBeans规范的Java对象以XML方式序列化和反序列化.以下

  • java如何利用FastJSON、Gson、Jackson三种Json格式工具自定义时间序列化

    Java处理JSON数据有三个比较流行的类库FastJSON.Gson和Jackson. Jackson Jackson是由其社区进行维护,简单易用并且性能也相对高些.但是对于复杂的bean转换Json,转换的格式鄙视标准的Json格式.PS:Jackson为Spring MVC内置Json解析工具 Gson Gson是由谷歌公司研发的产品,目前是最全的Json解析工具.完全可以将复杂的类型的Json解析成Bean或者Bean到Json的转换 FastJson Fastjson是一个Java语言

  • java教程之对象序列化使用基础示例详解

    这个过程也可以通过网络实现,可以先在Windows机器上创建一个对象,对其序列化,然后通过网络发给一台Unix机器,然后在那里准确无误地重新"装配".像RMI.Socket.JMS.EJB它们中的一种,彼此为什么能够传递Java对象,当然都是对象序列化机制的功劳. Java对象序列化机制一般来讲有两种用途: Java的JavaBeans: Bean的状态信息通常是在设计时配置的,Bean的状态信息必须被存起来,以便当程序运行时能恢复这些状态信息,这需要将对象的状态保存到文件中,而后能够

  • Oracle9iPL/SQL编程的经验小结

    正在看的ORACLE教程是:Oracle9iPL/SQL编程的经验小结.平时在PL/SQL中的编程中遇到一些问题,这里以问答的形式来进行把它们总结下来,以供大家分享. 1.当需要向表中装载大量的数据流或者需要处理大量的数据流的时候,能否使用管道提高处理效率? 管道函数对于改善并行查询的性能非常方便,它加快往表中加载数据的速度.管道函数的使用总结如下两点: 每当在查询里使用PL/SQL函数时,该查询将被序列化,即一个处理器只能运行一个查询实例,那么在这种情况下不可能使用并行查询(比如在数据仓库中要

随机推荐