Serialization(직렬화) 란?
- 직렬화는 객체를 저장 가능한 상태 or 전송 가능한 상태로 변환하는 것을 의미함. (직렬화 형태는 Binary, JSON, XML 이 있음)
- 반대로 객체로 변환하는 것을 역직렬화라 함. (직렬화 형태에서 객체로 변환하는 것)
사용이유
- 주로 데이터 전송 때문에 사용함. (A 와 B의 환경이 달라도 직렬화 데이터는 모든 시스템 환경에서 사용이 가능함.)
- 결과적으로 데이터를 주고 받기 위한 약속~
직렬화 종류 , 특징
직렬화 종류는 JSON, XML, Binary 있다고 언급 했음.
JSON 직렬화에 대해서 알아보잣.
기존 .Net FrameWork 에서는 JsonConvert
클래스를 통해서 직렬화 , 역직렬화를 했는데
.NET6 부터 JsonSerializer
클래스가 기존 JsonConvert
를 대체 한 듯
역직렬화를 할 때는 Deserialize<T>
중 <T>
부분에 Entity
를 넣어주면 참으로 편함. 이유는 Key 명칭과 동일한 필드라면 알아서 매칭 시켜줌.
using System.Text.Json;
JsonEntity JsonEntity = new JsonEntity();
JsonEntity.No = 1;
JsonEntity.Name = "타코";
JsonEntity.Age = 31;
// JSON 직렬화
string jsonSerialized = JsonSerializer.Serialize(JsonEntity);
// JSON 역직렬화
JsonEntity = JsonSerializer.Deserialize<JsonEntity>(jsonSerialized);
public class JsonEntity
{
public int No { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
아래 데이터는 위에서 직렬화한 jsonSerialized
값의 형태임.
JSON은 key : value
타입으로 데이터가 구성되어 있음.
직렬화시 문자열이 암호화 되는데, 역직렬화 할 때 다시 복원되니까 걱정 안해도 됨.
역직렬화 할 때, 해당 key 명칭과 동일한 No , Name , Age
가 포함되어 있는 Entity
에 value
값이 매칭 됨.
{"No":1,"Name":"\uD0C0\uCF54","Age":31}
아래 코드는 XML 직렬화, 역직렬화 예제임.
JSON
과 다른점은 XmlSerializer serializer = new XmlSerializer(typeof(JsonEntity))
이부분으로 XmlSerializer
클래스 인자로 Entity
타입을 추가해 줘야함.
직렬화 할 때 StringWriter
클래스가 필요하고 , 역직렬화 할 때 StringReader
클래스가 필요함.
직렬화는 XmlSerializer.Serialize(StringWriter,<Entity>)
형태로 StringWriter writer = new StringWriter()
클래스의 인스턴스에 저장 됨.
역직렬화는 StringReader reader = new StringReader(string)
형태로 인자로 XML 직렬화 문자열을 추가.
using System.Xml.Serialization;
JsonEntity JsonEntity = new JsonEntity();
JsonEntity.No = 1;
JsonEntity.Name = "타코";
JsonEntity.Age = 31;
string xmlSerialized = string.Empty;
XmlSerializer serializer = new XmlSerializer(typeof(JsonEntity));
// XML 직렬화
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer,JsonEntity);
xmlSerialized = writer.ToString();
}
// XML 역직렬화
using (StringReader reader = new StringReader(xmlSerialized))
{
JsonEntity jsonEntity = (JsonEntity)serializer.Deserialize(reader);
}
public class JsonEntity
{
public int No { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
아래 소스는 JsonEntity
객체를 직렬화한 값임.
JSON 이랑은 형태가 완전히 다름 ㅎ
<?xml version="1.0" encoding="utf-16"?>
<JsonEntity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<No>1</No>
<Name>타코</Name>
<Age>31</Age>
</JsonEntity>
'SW 기능 > C#' 카테고리의 다른 글
Struct (0) | 2024.02.02 |
---|---|
Static (0) | 2024.02.02 |
Reflection (0) | 2024.02.02 |
OverLoading, Override (0) | 2024.02.02 |
nameof (0) | 2024.02.02 |