C#, JSON in Native AOT
C#(.NET)으로 만든 앱을 네이티브 AOT로 게시하면 자체 포함 배포처럼 네이티브 코드로 AOT(ahead-of-time) 컴파일된 앱이 생성된다. 즉 IL(Intermediate language)을 네이티브 코드로 컴파일한다.1
System.Text.Json에서 원본을 생성하는 방법은 몇 가지 추가 및 제약 사항이 있는데 아래의 예제는 이를 설명하는 소스이다.2 테스트를 위해 생성한 파일은 Program.cs, TestModel.cs, JsonHelper.cs이다.
테스트를 위하여 콘솔 프로젝트를 만들고 프로젝트 설정(~.csproj)을 아래와 같이 변경하고 터미널에서 dotnet publish -c Release -r win-x64 빌드한다. 정상적으로 빌드가 완료되면 하위 폴더 Native에 실행파일이 생성된다.
1
2
public record SubItem(int Id, string Name);
public record MyModel(string Title, List<SubItem> Items);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*
[JsonSourceGenerationOptions(
WriteIndented = false,
PropertyNamingPolicy = null, // null로 설정 가능
PropertyNameCaseInsensitive = true,
GenerationMode = JsonSourceGenerationMode.Default // 직렬화/역직렬화 모두 생성
)]
*/
[JsonSourceGenerationOptions(PropertyNamingPolicy = JsonKnownNamingPolicy.CamelCase)]
//최상위 모델만 등록 (내부는 자동추적)
[JsonSerializable(typeof(MyModel))]
// partial 선언, 소스 생성기가 자동으로 Default static 프로퍼티 생성
internal partial class AppJsonContext : JsonSerializerContext
{
}
// AppJsonContext.g.cs