요즘 서로다른 앱 혹은 서비스간 메세지를 주고받을때 복잡한 구조의 데이터는 대부분 JSON으로 변환해서 주로 주고 받습니다. 물론, XML을 사용하는 곳도 아직은 많을겁니다. 그래서 이 XML로 전달받은 데이터를 JSON으로 그대로 직렬화 해서 보관하거나 다른 노드로 전송해야하는 경우들이 있습니다. 이런 경우 Json.NET을 사용하면 아주 간단하게 method 호출만으로 직렬화 할 수 있습니다. string xml = @" Alan http://www.google.com Louis http://www.yahoo.com "; XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); string json = JsonConvert.SerializeXmlNode(doc..
MVVM 패턴으로 개발을 하다보면 서로 다른 ViewModel 끼리나 ViewModel에서 View로 1:1 혹은 1:N으로 이벤트를 전달해야 하는 경우들이 많습니다. 이 경우 static class를 생성해서 전역에서 접근 가능한 event를 만들어 처리하거나 service class를 만들어서 의존성 주입을 통해 여러 ViewModel에서 접근 가능한 event 변수를 만들어 처리하는 등 여러가지 방법이 있습니다만 CommunityToolkit에서 제공하는 WeakReferenceMessenger 클래스를 사용하면 간단히 Pub/Sub 형태의 이벤트 큐를 구현 할 수 있습니다. 단순해서 사용하기 편리하지만 실무에서는 event 스트림에 debounce time을 적용한다거나 이벤트 버퍼를 ring 버..
.NET 6 부터 C# language version 10을 지원합니다. 여러 개선 사항중에 Lambda expression에 몇가지가 개선이 되었는데요, 한 번 알아보겠습니다. 원문 링크: https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/lambda-expressions#explicit-return-type 1. Natural type of a lambda expression 아래와 같이 가변형 변수에 람다식을 할당하면 이전 버전에서는 에러를 뿜어내서 var 대신 Func로 타입을 명시적으로 선언해줘야 하는 불편함이 있었는데 컴파일러가 이제 조금 똑똑해져서 람다 표현식으로 부터 추론해서 리턴하는 값이 타입을 알아서..
Python을 써 본 사람들은 다들 Jupyter Notebook을 사용해 본적이 있을겁니다. Jupyter Notebook을 사용하면 단순 playground 용도로 여러가지 간단한 코드블럭을 시험해 보는 용도로 사용한다거나 직접 수정하고 실행해 볼 수 있는 튜토리얼 문서를 만드는 등 단순히 주석달린 소스코드로 보관하거나 공유하는 것보다 훨씬 유용합니다. 이제는 이 Jupyter Notebook에서 C# 코드로된 노트북을 만들 수 있는데요 현재 PC에 Anaconda/Miniconda 환경 혹은 Python가 Jupyter Notebook 그리고 .Net 개발환경이 이미 설치되어 있는 환경이라고 가정하면 아래 순서대로 커맨드라인 명령어들만 실행해주면 간단히 사용 가능합니다. 1. Microsoft.do..
C#에 HMACSHA256 클래스를 사용하면 아주 간단한 코드로 사용자 비밀번호를 암호화된 문자열로 바꿀 수 있습니다. public static class CredentialHelper { public static string GetHMACSHA256Hash(string username, string password) { var key = Encoding.ASCII.GetBytes(username); var data = Encoding.ASCII.GetBytes(password); return Convert.ToBase64String(new HMACSHA256(key).ComputeHash(data)); } } 위와같이 static class를 하나 만들어두고 사용자가 입력한 username과 passw..
주 원인은 파일 경로가 너무 길어서 발생합니다. 그래서 프로젝트 폴더명을 줄이고 좀 더 상위 폴더에 위치시키는 방법을 써서 경로명 길이를 줄여주면 되지만 불가피하게 긴 이름과 깊은 level에 폴더에 위치시켜야한다면 Windows Registry를 변경 하는 방법이 있습니다. 아래 registry 경로로 가서 Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled를 1로 설정해 주면 해결 됩니다. 해당 property가 없다면 DWORD 타입으로 하나 생성해서 값을 1로 설정하면 됩니다. (리부팅 필요하지 않음)