Utf8 Json의 Dictionary 열쇠는 Custom Formtter 사용
개시하다
.NET가 JSON을 처리할 때 Utf8Json의 프로그램 라이브러리가 있습니다.
여기에는 Utf8Json을 사용할 때 Dictionary 객체의 키에 끼워 넣는 것이 아니라 자체 제작한 등급과 구조체를 사용하는 방법을 소개한다.
대상의 자제류
이런 Immutable 기본 구조기가 없는 학급과 구조체는 Dictionary의 열쇠를 이용한다.
public readonly struct EmployeeId
{
public EmployeeId(int intValue)
{
IntValue = intValue;
}
public int IntValue { get; }
}
Custom Formater 만들기
Utf8 Json에서는 JSON이 독립형 클래스에 있는 시리아를 명확히 지정하려면 IJsonFormitter를 시행해야 하고, Dictionary 열쇠를 사용하려면 IJsonFormitter에 IOb jectProperty NameFormitter를 추가로 시행해야 한다.
EmployeeId의 예에서 int의 속성만 현지화하고 싶기 때문에Formoter는 다음과 같이 실시한다.
이때 JSON 규격에 따라 Lenovo 배열(Dictionary)의 키는 문자열이어야 하므로 다른 사용 위치와 다른 로컬화·분류화를 활용할 수 있도록 서로 다른 인터페이스, IOb ject Property NameFormeter를 사용해 변환한다.
public sealed class EmployeeIdFormatter : IJsonFormatter<EmployeeId>, IObjectPropertyNameFormatter<EmployeeId>
{
public void Serialize(ref JsonWriter writer, EmployeeId value, IJsonFormatterResolver formatterResolver)
{
writer.WriteInt32(value.IntValue);
}
public EmployeeId Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver)
{
return new EmployeeId(reader.ReadInt32());
}
public void SerializeToPropertyName(ref JsonWriter writer, EmployeeId value, IJsonFormatterResolver formatterResolver)
{
writer.WriteInt32(value.IntValue);
}
public EmployeeId DeserializeFromPropertyName(ref JsonReader reader, IJsonFormatterResolver formatterResolver)
{
return new EmployeeId(reader.ReadString());
}
}
Custom Formater 활용
이러한 Formoter를 활용하려면 다음과 같이 표준 Formoter에 추가합니다.
CompositeResolver.RegisterAndSetAsDefault(
new IJsonFormatter[] {new EmployeeIdFormatter()},
new[] {StandardResolver.Default});
var employeeNames = new Dictionary<EmployeeId, string>
{
[new EmployeeId(0)] = "Steve Jobs",
[new EmployeeId(1)] = "Bill Gates"
};
var jsonBytes = Utf8Json.JsonSerializer.Serialize(employeeNames);
이렇게 하면 다음과 같은 JSON을 얻을 수 있다.{0:"Steve Jobs",1:"Bill Gates"}
이상.
Reference
이 문제에 관하여(Utf8 Json의 Dictionary 열쇠는 Custom Formtter 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/nuits_jp/articles/utf8json-custom-formatter-for-dictionary-key텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)