C#/수업 내용
json형식 직렬화, 역직렬화
Game Client Lee Hwanguk
2023. 1. 13. 01:54
#직렬화? = byte형태로 인스턴스를 변환
#역직렬화?=byte형태인 데이터를 인스턴스로 다시 변환
#byte와 bit
#1,기본형(직렬화-인스턴스를 byte형태로 변환)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json; //꼭 작성해야한다
using System.IO; //꼭 작성해야한다
namespace Study14
{
class App
{
public App()
{
//#1 직렬화
//객체를 만들고 직렬화 해서 JSON형식 (문자열) 파일로 저장
//직렬화 : 아이템 객체를 넣어 주면 json문자열을 반환
//저장
Item item = new Item("창", 8); //1. 인스턴스 생성
string json=JsonConvert.SerializeObject(item); //2.직렬화(json)형식으로 저장
Console.WriteLine(json); //3.출력으로 확인
File.WriteAllText("./my_item.json", json); //4.파일 저장
//#2 역직렬화
//역직렬화
//문자열 -> 객체
//역직렬화
}
}
}
#1_1 역직렬화(byte형식을 다시 인스턴스로 변환)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json; //꼭 작성해야한다
using System.IO; //꼭 작성해야한다
using System.Runtime.Serialization.Formatters.Binary;
namespace Study14
{
class App
{
public App()
{
//#1 직렬화(byte 형태로 데이터를 변환)
//객체를 만들고 직렬화 해서 JSON형식 (문자열) 파일로 저장
//직렬화 : 아이템 객체를 넣어 주면 json문자열을 반환
//저장
Item item = new Item("창", 8); //1. 인스턴스 생성(스트림을 만든다),(스트림=데이터가 지나가는 통로)
//string json=JsonConvert.SerializeObject(item); //2.객체를 직렬화한다
//Console.WriteLine(json); //3.출력으로 확인
//File.WriteAllText("./my_item.json", json); //4.파일 저장
//#2 역직렬화(byte로 변환된 Data를 원래대로 Object나 Data로 변환)
//역직렬화
//문자열 -> 객체
string json = File.ReadAllText("./my_item.json");
//역직렬화
JsonConvert.DeserializeObject<Item>(json);
Console.WriteLine(item);
Console.WriteLine("name: {0}, damage: {1}", item.name, item.damage);
}
}
}
#2. 리스트인스턴스 직렬화
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json; //꼭 작성해야한다
using System.IO; //꼭 작성해야한다
using System.Runtime.Serialization.Formatters.Binary;
namespace Study14
{
class App
{
public App()
{
//#1 직렬화(byte 형태로 데이터를 변환)
//객체를 만들고 직렬화 해서 JSON형식 (문자열) 파일로 저장
//직렬화 : 아이템 객체를 넣어 주면 json문자열을 반환
//저장
//1. 인스턴스 생성(스트림을 만든다),(스트림=데이터가 지나가는 통로)
//Item[] items = new Item[3]; //배열 인스턴스
List<Item> items=new List<Item>(); //리스트 인스턴스
items.Add(new Item("장검",8));
items.Add(new Item("단검", 3));
items.Add(new Item("도끼", 9));
//2.객체를 직렬화한다
string json=JsonConvert.SerializeObject(items);
//3.출력으로 확인
Console.WriteLine(json);
//4.파일 저장
File.WriteAllText("./my_item.json", json);
//#2 역직렬화(byte로 변환된 Data를 원래대로 Object나 Data로 변환)
//역직렬화
//문자열 -> 객체
//역직렬화
}
}
}
#2_2 리스트를 다시 역직렬화 해보자
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json; //꼭 작성해야한다
using System.IO; //꼭 작성해야한다
using System.Runtime.Serialization.Formatters.Binary;
namespace Study14
{
class App
{
public App()
{
//#1 직렬화(byte 형태로 데이터를 변환)
//객체를 만들고 직렬화 해서 JSON형식 (문자열) 파일로 저장
//직렬화 : 아이템 객체를 넣어 주면 json문자열을 반환
//저장
//1. 인스턴스 생성(스트림을 만든다),(스트림=데이터가 지나가는 통로)
//Item[] items = new Item[3]; //배열 인스턴스
List<Item> items=new List<Item>(); //리스트 인스턴스
items.Add(new Item("장검",8));
items.Add(new Item("단검", 3));
items.Add(new Item("도끼", 9));
//2.객체를 직렬화한다
//string json=JsonConvert.SerializeObject(items);
////3.출력으로 확인
//Console.WriteLine(json);
////4.파일 저장
//File.WriteAllText("./my_item.json", json);
//#2 역직렬화(byte로 변환된 Data를 원래대로 Object나 Data로 변환)
//역직렬화
//문자열 -> 객체
string json = File.ReadAllText("./my_item.json");
//Console.WriteLine(items);
//역직렬화
JsonConvert.DeserializeObject<List<Item>>(json); //리스트를 다시 json으로
Console.WriteLine(json); //json으로 잘 변환된건지 출력해보자
}
}
}
#3. 배열을 직렬화해보자
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json; //꼭 작성해야한다
using System.IO; //꼭 작성해야한다
using System.Runtime.Serialization.Formatters.Binary;
namespace Study14
{
class App
{
public App()
{
//#1 직렬화(byte 형태로 데이터를 변환)
//객체를 만들고 직렬화 해서 JSON형식 (문자열) 파일로 저장
//직렬화 : 아이템 객체를 넣어 주면 json문자열을 반환
//저장
//1. 인스턴스 생성(스트림을 만든다),(스트림=데이터가 지나가는 통로)
Item[] items = new Item[3]; //배열 인스턴스
//List<Item> items=new List<Item>(); //리스트 인스턴스
items[0]=new Item("Sword",8);
items[1]=new Item("dagger", 3);
items[2]=new Item("Ax", 9);
//2.객체를 직렬화한다
string json=JsonConvert.SerializeObject(items);
////3.출력으로 확인
Console.WriteLine(json);
////4.파일 저장
//File.WriteAllText("./my_item.json", json);
//#2 역직렬화(byte로 변환된 Data를 원래대로 Object나 Data로 변환)
//역직렬화
//문자열 -> 객체
//string json = File.ReadAllText("./my_item.json");
//Console.WriteLine(items);
//역직렬화
//JsonConvert.DeserializeObject<Item>(json); //리스트를 다시 json으로
//Console.WriteLine(json); //json으로 잘 변환된건지 출력해보자
}
}
}
#3_1 json된 배열인스턴스를 다시 인스턴스화하고 List에 넣어서 for문으로 확인까지해보자 (배열의 인덱스들을 for문으로 돌며 배열[i]을 list.Add하는 방법이 계속 헷갈린다 연습이 많이 필요하다 카페에 컬렉션<T> 연습 템플릿으로 4가지 컬랙션들 연습을하자
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json; //꼭 작성해야한다
using System.IO; //꼭 작성해야한다
using System.Runtime.Serialization.Formatters.Binary;
namespace Study14
{
class App
{
public App()
{
//#1 직렬화(byte 형태로 데이터를 변환)
//객체를 만들고 직렬화 해서 JSON형식 (문자열) 파일로 저장
//직렬화 : 아이템 객체를 넣어 주면 json문자열을 반환
//저장
//1. 인스턴스 생성(스트림을 만든다),(스트림=데이터가 지나가는 통로)
//Item[] items = new Item[3]; //배열 인스턴스
////List<Item> items=new List<Item>(); //리스트 인스턴스
//items[0] = new Item("Sword", 8);
//items[1] = new Item("dagger", 3);
//items[2] = new Item("Ax", 9);
//2.객체를 직렬화한다
//string json=JsonConvert.SerializeObject(items);
////3.출력으로 확인
//Console.WriteLine(json);
////4.파일 저장
//File.WriteAllText("./my_item.json", json);
//#2 역직렬화(byte로 변환된 Data를 원래대로 Object나 Data로 변환)
//역직렬화
//문자열 -> 객체
string json = File.ReadAllText("./my_item.json");
Item[] items = JsonConvert.DeserializeObject<Item[]>(json);
Console.WriteLine(items);
List<Item> list = new List<Item>();
for(int i=0; i<items.Length; i++)
{
list.Add(items[i]);
Console.WriteLine(list.Count); //lsit에 3개는 잘들어간다 요소들을 꺼내서 확인도 하고싶다 2중 for문으로 돌려볼까
}
//역직렬화
//JsonConvert.DeserializeObject<Item>(json); //리스트를 다시 json으로
//Console.WriteLine(json); //json으로 잘 변환된건지 출력해보자
}
}
}
#4. Stack의 직렬화
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json; //꼭 작성해야한다
using System.IO; //꼭 작성해야한다
using System.Runtime.Serialization.Formatters.Binary;
namespace Study14
{
class App
{
public App()
{
//#1 직렬화(byte 형태로 데이터를 변환)
//객체를 만들고 직렬화 해서 JSON형식 (문자열) 파일로 저장
//직렬화 : 아이템 객체를 넣어 주면 json문자열을 반환
//저장
//1. 인스턴스 생성(스트림을 만든다),(스트림=데이터가 지나가는 통로)
Item item=new Item("단도", 2);
Item item1=new Item("너클", 3);
Stack<Item>stack=new Stack<Item>();
stack.Push(item);
stack.Push(item1);
//2.객체를 직렬화한다
string json=JsonConvert.SerializeObject(stack);
//3.출력으로 확인
Console.WriteLine(json);
//4.파일 저장
File.WriteAllText("./my_item.json", json);
//#2 역직렬화(byte로 변환된 Data를 원래대로 Object나 Data로 변환)
//역직렬화
//문자열 -> 객체
//역직렬화
//리스트를 다시 json으로
//json으로 잘 변환된건지 출력해보자
}
}
}
#4_1 Stack의 역직렬화