UnityAdvanced-データシリアル化-BinaryFormatter



Unity Advanced Data Serialization Binaryformatter



BinaryFormatter

BinaryFormatterは、バイナリフォーマッタを使用してシリアル化されます。使用するストリームとフォーマッターのインスタンスを作成してから、フォーマッターのSerializeメソッドを呼び出すだけです。シリアル化されるストリームとオブジェクトインスタンスは、この呼び出しの引数として提供されます。クラス内のすべてのメンバー変数(プライベートとしてマークされているものも含む)がシリアル化されます。

まず、クラスを作成します。



[Serializable] public class Percen{ public string name = '' public string email = '' public int age = 0 }

Serializable属性は、クラスをシリアル化できることを明示的に示すために使用されます。同様に、NonSerializable属性を使用して、クラスをシリアル化できないことを明示的に示すことができます。

次に、このクラスのインスタンスを作成し、それをシリアル化して、永続化のためにファイルに保存します。



Percenobj = new Percen() Obj.name = ' ' obj.email = 'root@xxxxx' obj.age = 20 IFormatter formatter = new BinaryFormatter() Stream stream = new FileStream('MyFile.bin', FileMode.Create, FileAccess.Write, FileShare.None) formatter.Serialize(stream, obj) stream.Close()

オブジェクトを以前の状態に復元することも非常に簡単です。まず、読み取り用のフォーマッターとストリームを作成してから、フォーマッターにオブジェクトを逆シリアル化します。

IFormatter formatter = new BinaryFormatter() Stream stream = new FileStream('MyFile.bin', FileMode.Open, FileAccess.Read, FileShare.Read) MyObject obj = (MyObject) formatter.Deserialize(stream) stream.Close() Console.WriteLine('name: {0}', obj.name) Console.WriteLine('email: {0}', obj.email) Console.WriteLine('age: {0}', obj.age)

拡張機能(カスタム実装シリアル化インターフェイス)

class Person:ISerializable { public int age public string name public string sex public Person() { } public Person(SerializationInfo info, StreamingContext context) { age=info.GetInt32('age') name=info.GetString('name') } public void GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue('age', age) info.AddValue('name', name) } }