직렬화

데이터를 바이트로도, JSON으로도 담을 수 있습니다 — 둘 다 Udon이 이미 가진 것을 얇게 감싼 것일 뿐, 다시 만든 게 아닙니다.

업데이트 2026-09-11

서로 무관한 두 가지 방식, 둘 다 재구현이 아니라 얇은 래퍼입니다: 바이트에는 ByteWriter/ByteReader, 텍스트에는 Json.

using Udonite.Serialization;

byte[] payload = new ByteWriter().WriteInt32(7).WriteString("hi").ToArray();

string json = Json.Serialize(dictionaryOrIJsonSerializable);

바이트를 다루는 이유는 Udon에 자체 직렬화 도구가 없기 때문입니다. ByteWriter/ByteReader는 Udon의 네트워크 레이어가 그대로 마샬링할 수 있는 타입만 다룹니다 — 32비트 이하의 스칼라, string, byte[], Vector2, Vector3, Quaternion. System.BitConverter를 그대로 옮긴 게 아니라 의도적으로 좁힌 핵심입니다. reached 클래스는 통째로 컴파일되고, 선언한 메서드마다 프로그램이 살아있는 동안 계속 힙을 잡아먹으니, 여기 있는 건 페이로드가 실제로 실어 나를 법한 것들뿐입니다.

JSON을 다루는 이유는 Udon에 이미 그게 있기 때문입니다. Json은 Udon 자신의 파서인 VRCJson을 감쌀 뿐, 두 번째 파서를 만들지 않습니다. 대부분의 호출부에서 VRChat 자신의 내부 타입인 DataToken을 숨깁니다. 타입은 IJsonSerializable을 구현하는 것으로 참여하고, 나머지는 Json.Serialize<T>/Deserialize<T>가 처리합니다.

무엇이 들어있나

타입 용도
ByteWriter, ByteReader byte[]로 담기 — 메시지 페이로드, 저장 포맷, 형태를 직접 정할 수 있는 모든 것
Json, IJsonSerializable JSON 텍스트로 담기 — 외부 API, 사람이 직접 편집하는 파일처럼 반드시 JSON이어야 하는 것

다음으로 읽을 것

시작하기에서 값을 바이트로, 타입을 JSON으로 담아봅니다.

레퍼런스는 양쪽 모두의 전체 멤버 목록입니다.

문제가 발생했습니다 새로 고침