본문 바로가기

.NET/C#

Base64 Encoding and Decoding

Base64인코딩 디코딩을 위한 헬퍼 클래스이다. 여기서 객체의 프로퍼티를 인코딩하는 부분이 있는데 Reflection을
사용하였습니다. 4.0에서만 돌아가는 코드 Parallel.ForEach를 사용했음으로 4.0이하버전에서는 작동안합니다.

public
 class Base64EncodingHelper { public Encoding EucKrEncoding { get { return System.Text.Encoding.GetEncoding(51949); } } private static Base64EncodingHelper _helper; public static Base64EncodingHelper Instance { get { if (_helper == null) _helper = new Base64EncodingHelper(); return _helper; } } public string Encoding(string input,Encoding encoding)  { string result = ""; try { if (!String.IsNullOrEmpty(input)) { byte[] bytes = encoding.GetBytes(input); result = Convert.ToBase64String(bytes); } } catch (Exception ex) { LogHelper.Instance.Error(ex.ToString()); } return result; } public string Decoding(string input,Encoding decoding)  { string result = ""; try { if (!String.IsNullOrEmpty(input)) { byte[] bytes = Convert.FromBase64String(input); result = decoding.GetString(bytes); } } catch (Exception ex) { LogHelper.Instance.Error(ex.ToString()); } return result; } public void DecodingObject<T>(T obj) { try { ConvertObject<T>(obj, EncodingType.Decoding); } catch (Exception ex) { LogHelper.Instance.Error(ex.ToString()); } } public void EncodingObject<T>(T obj) { try { ConvertObject<T>(obj, EncodingType.Encoding); } catch (Exception ex) { LogHelper.Instance.Error(ex.ToString()); } } private void ConvertObject<T>(T obj,EncodingType encodingType)  { Type type = obj.GetType(); PropertyInfo[] properties = type.GetProperties(); Parallel.ForEach(properties, property => { if (encodingType == EncodingType.Encoding) property.SetValue(obj, Base64EncodingHelper.Instance.Encoding( property.GetValue(obj, null) == null ? "" : property.GetValue(obj, null).ToString(), EucKrEncoding), null); else if (encodingType == EncodingType.Decoding) property.SetValue(obj, Base64EncodingHelper.Instance.Decoding( property.GetValue(obj, null) == null ? "" : property.GetValue(obj, null).ToString(), EucKrEncoding), null); }); } }