-
Json을 통한 Kafka ObjectId에 대한 처리프로그래밍 2024. 10. 21. 18:00
흔히 Kafka 처리 시에 ObjectId에 대한 처리로 혼선이 올 수 있다.
이번에는 Json Serialize와 Deserialize시에 ObjectId 오류를 피하고 처리하는 방법에 대해 알아보자.
먼저 해야할 일은 ObjectIdConverter를 만드는 일이다.
아래의 코드를 보자.
public class ObjectIdConverter : JsonConverter<ObjectId> { public override void Write(Utf8JsonWriter writer, ObjectId value, JsonSerializerOptions options) { writer.WriteStringValue(value.ToString()); } public override ObjectId Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var stringValue = reader.GetString(); if (ObjectId.TryParse(stringValue, out var objectId)) { return objectId; } throw new JsonException($"Unable to convert \"{stringValue}\" to ObjectId."); } public override bool CanConvert(Type typeToConvert) { return typeof(ObjectId).IsAssignableFrom(typeToConvert); } }
상속받은 Converter는 System.Text.Json.Serialization의 Converter이다.
위 코드는 Json 변환, 역변환시에 ObjectId 유무를 확인하여 해당 값을 설정하는 코드이다.
위 코드를 Application 전체에서 사용하고자 한다면 아래와 같이 선언하면 된다.
builder.Services.ConfigureHttpJsonOptions(op => { op.SerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; op.SerializerOptions.Converters.Clear(); op.SerializerOptions.Converters.Add(new ObjectIdConverter()); });
만약, JsonConvert 호출하는 부분에서만 사용한다면 아래와 같이 사용하면 된다.
var option = new JsonSerializerOptions() { PropertyNameCaseInsensitive = true, ReferenceHandler = ReferenceHandler.IgnoreCycles, Converters = { new ObjectIdConverter() } }; return JsonSerializer.Deserialize<T>(json, option);
ObjectId를 처리하는데 공통받지 않기를 바라며...
'프로그래밍' 카테고리의 다른 글
AntdUI 소개 (1) 2024.10.22 리소스 관리 전략 (0) 2024.10.22 확장 메서드란? (0) 2024.10.21 ASP.NET CORE 8에서의 Exception 처리 (0) 2024.10.21 AWS Secrets Manager에 대하여 (0) 2024.10.21