카테고리 없음

0819 유니티(JsonConvert에서 Vector2Int형식의 Key 사용)

버스창문 2025. 8. 19. 19:33

 

지들이 직렬화할때 

{"(-90, 113)":[{"id":0,"cellX":-90,"cellY":113,"kind":0,"status":0,"posX":-3568.121,"posY":63.7429161,"posZ":4531.31445,"rotX":132.610962,"rotY":320.3897,"rotZ":108.031715,"weight":4.16219139},{"id":9182,"cellX":-90,"cellY":113,"kind":1,"status":0,"posX":-3566.43555,"posY":99.093605,"posZ":4550.54053,"rotX":259.160156,"rotY":225.367142,"rotZ":169.883423,"weight":4.67370272},{"id":39793,"cellX":-90,"cellY":113,"kind":5,"status":0,"posX":-3571.44946,"posY":43.7862473,"posZ":4549.477,"rotX":274.748169,"rotY":281.0014,"rotZ":199.254074,"weight":0.290226936}

 

이렇게 만들어놓고

저 (-90,113)을 따옴표 있다고 string으로 쳐받아서 역직렬화를 못하는 정신나간 모습이다.

    private Vector2Int Vector2IntParse(string key) // JsonConvert로 Vector2Int 직렬화 했더니 미친놈들이 지들이 string으로 직렬화 해놓고 역직렬화하면
                                                   // string을 Vector2Int로 변환할수 없다고 개소리 짓걸여서 이런 미친새기들 진짜
    {
        var parts = key.Trim('(', ')')
            .Split(','); // 쉼표로 분리

        int x = int.Parse(parts[0]);
        int y = int.Parse(parts[1]);

        // 4) Vector2Int 반환
        return new Vector2Int(x, y);

    }
        if (File.Exists("./Assets/Resources/TrashMapData2.json"))
        {
            var json = File.ReadAllText("./Assets/Resources/TrashMapData2.json"); // 파일이 존재하면 해당 파일을 읽어옴
            //var data = JsonConvert.DeserializeObject<TrashInfo[]>(json); // JSON 데이터를 딕셔너리로 역직렬화
            var data = JsonConvert.DeserializeObject<Dictionary<string, List<TrashInfo>>>(json); // JSON 데이터를 딕셔너리로 역직렬화
            //this.trashList = data.ToList(); // 역직렬화된 데이터를 리스트로 변환
            this.dicTrash = new Dictionary<Vector2Int, List<TrashInfo>>();
            this.dicTrash = data.ToDictionary(x => Vector2IntParse(x.Key), x => x.Value); // 딕셔너리로 변환
        }

이러면 직렬화 할수 있다.