
원본 데이터는 JSON 형식으로 array 필드에 정수 값이 들어 있습니다. serialize 메서드를 사용하여 PackedArray 형식으로 serialize 한 후 deserialize 할 때 원본 데이터가 변형되는 것을 발견했습니다.
원본 데이터는 다음과 같습니다.
#hostingforum.kr
json
{
"array": [1, 2, 3, 4, 5]
}
serialize 한 후의 데이터는 다음과 같습니다.
#hostingforum.kr
json
{
"array": {
"_bsontype": "PackedArray",
"values": [1, 2, 3, 4, 5]
}
}
이후 deserialize 한 데이터는 다음과 같습니다.
#hostingforum.kr
json
{
"array": {
"_bsontype": "PackedArray",
"values": [1, 2, 3, 4, 5]
}
}
다만, 원본 데이터와는 다르게 _bsontype이 "PackedArray"로만 나옵니다. 원본 데이터의 형식이 유지되지 않습니다.
이러한 현상을 해결하는 방법은 다음과 같습니다.
1. PackedArray 형식으로 serialize 할 때, 원본 데이터의 형식도 함께 serialize 하도록 합니다.
#hostingforum.kr
cpp
bsoncxx::document::raw_view serialized_doc = bsoncxx::document::serialize(view, bsoncxx::document::serialize_options{}.pack_array());
이 코드는 serialize 메서드에 serialize_options 객체를 추가하여 pack_array() 메서드를 호출합니다. 이 메서드는 원본 데이터의 형식도 함께 serialize 하도록 합니다.
2. deserialize 할 때, 원본 데이터의 형식도 함께 deserialize 하도록 합니다.
#hostingforum.kr
cpp
bsoncxx::document::view_or_document deserialized_doc = bsoncxx::document::parse(serialized_doc.view(), bsoncxx::document::parse_options{}.pack_array());
이 코드는 parse 메서드에 parse_options 객체를 추가하여 pack_array() 메서드를 호출합니다. 이 메서드는 원본 데이터의 형식도 함께 deserialize 하도록 합니다.
위의 코드를 적용하면 원본 데이터의 형식이 유지되어 원본 데이터와 동일한 형식으로 deserialize 할 수 있습니다.
2025-06-24 00:33