반응형
* 객체 직렬화 (Serialization)
- 객체를 메모리나 파일 , 데이터베이스에 저장할 때 쓰이는 방식
* 예제
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace ObjectSerialization_File
{
public partial class Form1 : Form
{
//객체 저장을 위한 변수 선언...
ObjectClass oc = new ObjectClass();
ObjectStruct os = new ObjectStruct();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//저장
//객체 클래스 변수 값 변경...
oc.FniValue = 1500;
oc.FnjVlaue = 3000;
using (System.IO.Stream stm = System.IO.File.Open("ect.dat", System.IO.FileMode.Create , System.IO.FileAccess.ReadWrite ))
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
//객체 직렬화 저장
bf.Serialize(stm, oc);
stm.Close();
}
textBox1.Text += "Object Class" + System.Environment.NewLine;
textBox1.Text += "i Value : " + oc.FniValue.ToString() + System.Environment.NewLine;
textBox1.Text += "j Value : " + oc.FnjVlaue.ToString() + System.Environment.NewLine;
textBox1.Text += "i+j Value : " + oc.GetValue().ToString() + System.Environment.NewLine;
textBox1.Text += "객체 클래스 저장 완료..." + System.Environment.NewLine;
//객체 구조체 변수 값 변경...
os.i = 30000;
os.j = 40000;
using (System.IO.Stream stm = System.IO.File.Open("ect2.dat", System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite))
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
//객체 직렬화 저장
bf.Serialize(stm, os);
stm.Close();
}
textBox1.Text += "Object Struct" + System.Environment.NewLine;
textBox1.Text += "i Value : " + os.i .ToString() + System.Environment.NewLine;
textBox1.Text += "j Value : " + os.j.ToString() + System.Environment.NewLine;
textBox1.Text += "객체 구조체 저장 완료..." + System.Environment.NewLine;
textBox1.Text += "===============" + System.Environment.NewLine;
}
private void button2_Click(object sender, EventArgs e)
{
ObjectClass LoadOC;
ObjectStruct LoadOS;
//불러오기
using (System.IO.Stream stm = System.IO.File.Open("ect.dat", System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
//직렬화 된 객체 역직렬화 및 다시 객체 클래스로 형변환
LoadOC = (ObjectClass) bf.Deserialize(stm);
stm.Close();
}
textBox1.Text += "Object Class" + System.Environment.NewLine;
textBox1.Text += "i Value : " + LoadOC.FniValue.ToString() + System.Environment.NewLine;
textBox1.Text += "j Value : " + LoadOC.FnjVlaue.ToString() + System.Environment.NewLine;
textBox1.Text += "i+j Value : " + LoadOC.GetValue().ToString() + System.Environment.NewLine;
textBox1.Text += "객체 클래스 불러오기 완료..." + System.Environment.NewLine;
using (System.IO.Stream stm = System.IO.File.Open("ect2.dat", System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
//직렬화 된 객체 역직렬화 및 다시 구조체로 형변환
LoadOS = (ObjectStruct) bf.Deserialize(stm) ;
stm.Close();
}
textBox1.Text += "Object Struct" + System.Environment.NewLine;
textBox1.Text += "i Value : " + LoadOS.i.ToString() + System.Environment.NewLine;
textBox1.Text += "j Value : " + LoadOS.j.ToString() + System.Environment.NewLine;
textBox1.Text += "객체 구조체 불러오기 완료..." + System.Environment.NewLine;
}
}
//객체 직렬화를 위한 클래스 선언...
[Serializable]
public class ObjectClass
{
int i = 300;
int j = 100;
public int FniValue
{
get { return i;}
set { i = value;}
}
public int FnjVlaue
{
get { return j; }
set { j = value; }
}
public int GetValue()
{
return i + j;
}
}
//객체 직렬화를 위한 구조체 선언...
[Serializable]
public struct ObjectStruct
{
public int i;
public int j;
}
}
* 객체 직렬화를 위해서는 그 선언 객체에 반드시 [Serializable] 을 붙여 줘야 됨.
반응형
'C# Programming' 카테고리의 다른 글
[C#] 레지스트리(Registry) Create , Read, Write, Delete (0) | 2019.09.22 |
---|---|
[C#] 소스 코드 동적 컴파일 예제 (0) | 2019.09.21 |
[C#] 구조체 를 바이트 배열로 또는 바이트 배열을 구조체로 변환 (0) | 2019.09.18 |
[C#] 크로스 스레드 (Cross Thread) 예제 (0) | 2019.09.15 |
[C#] 인덱서 (Indexer) (0) | 2019.09.14 |