일반적으로 여러개의 class library혹은 여러개의 class 내부에서 NLog를 사용해 log message를 생성해 내게되는데, 매번 log message가 발생 할 때 마다 해당 메세지를 가공해서 GUI상에 뿌려준다거나 GRPC나 WebSocket 혹은 Kafka같은 Message Broker로 publish하는 기능이 필요할 때가 있습니다. 이럴 때 아래와같이 NLog의 MethodCallTarget 클래스를 사용하면 쉽게 구현이 가능합니다. // Callback 함수를 정의합니다. var target = new MethodCallTarget("LogNotify", async (logEvent, parameters) => { // 여기서 본인이 원하는 처리를 하면 됩니다. 내부에 비동기 호출..
1. 고전적인 방법 임시 변수 하나를 더 선언한 다음 두 변수 중 하나의 값 혹은 참조를 복사해두고 swap 하는 방법 var a = 10; var b = 20; var temp = a; a = b; b = temp; 2. 현대적인 방법 (C# 7.0 이상) 튜플(Tuple)을 사용하면 한 줄로 표현이 가능합니다. (b, a) = (a, b)
종종 가변적인 구조의 JSON 데이터를 C#에서 다뤄야 할 경우나 혹은 JSON내의 특정 데이터만 추출 혹은 수정을 원할경우 일일이 맵핑할 class들을 만들어서 JSON 데이터를 다루기보다 JObject로 parsing 후 아래와 같이 SelectToken/SelectTokes 함수들을 사용해서 원하는 token을 찾아서 값을 가져오거나 조작하는 것이 훨씬 효율적입니다. 원문: https://www.newtonsoft.com/json/help/html/SelectToken.htm 1. SelectToken SelectToken은 JToken을 리턴하는 method이며 하위 토큰에 대한 문자열 경로를 사용합니다. SelectToken은 하위 토큰을 반환하거나 경로 위치에서 토큰을 찾을 수 없는 경우 nu..
보통 JSON Serialization 후 텍스트 파일 형태로 저장하거나 DB에 저장하거나 하는데, enum 값이 숫자 형태로 저장되어서 JSON 문자열을 열어볼 때 readbility가 떨어집니다. 그래서 enum 타입 변수의 값이 문자열 형태로 저장 하는 경우가 많은데요, 그럴 때 아래와 같이 attribute를 특정 멤버 변수에 선언해주면 됩니다. using Newtonsoft.Json; using Newtonsoft.Json.Converters; public enum CompanyType { Apple, Samsung, } public class Company { [JsonConverter(typeof(StringEnumConverter))] public CompanyType CompanyType..
WebAPI 프로젝트 템플릿으로 프로젝트 생성 후에 기본 호스팅 주소로 html static file이 라우팅 되게 하고 싶을 때, 아래와 같이 UseDefaultFiles()와 UseStaticFiles()를 순서대로 추가해주면 됩니다. ※. 순서가 뒤바뀌면 브라우저에서 서비스 주소만 입력할 경우 index.html로 자동 라우팅이 되지 않고 No Found 오류 뿜어내니까 꼭 순서를 지켜줘야 합니다. (이건 어떻게 보면 정말 병신같은 디자인인듯...) app.UseDefaultFiles(); app.UseStaticFiles();
ASP.NET 으로 개발 할 때는 WebApplication builder가 해당 파일을 읽어와서 ConfigurationManager 클래스로 접근을 제공해 주기 때문에 보통 따로 json 설정 파일을 구성해서 따로 파일을 읽어온다음 특정 class로 Deserialize해서 사용하지는 않습니다. 하지만, 설정 항목이 몇 개 안되는 경우에는 문제가 없지만 조금 복잡하거나 property수가 많은 경우에는 정의된 class에 맵핑된 instance를 사용하는게 개발할 때 훨씬 편리하죠. 예를들어 설정파일이 아래와같을 때, appsettings.json{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning..