반응형
Log 처리에 모든 값을 다 넣으면 좋긴하겠지만 객체의 내용이 너무나 많다면 보기에도 부담되고 데이터 쌓을때도 부담된다.
어떻게 할까 고민하다가 타겟과 소스를 기준으로 양 객체 데이터를 기반으로 변경된 값만 추출하는 함수를 만들었다.
private Dictionary<string, object> DictionaryFromType(object atype)
{
if (atype == null) return new Dictionary<string, object>();
Type t = atype.GetType();
PropertyInfo[] props = t.GetProperties();
Dictionary<string, object> dict = new Dictionary<string, object>();
foreach (PropertyInfo prp in props)
{
object value = prp.GetValue(atype);
dict.Add(prp.Name, value);
}
return dict;
}
public string PropertyChangeLog(object src, object obj, string ignoreObject = "")
{
StringBuilder sb = new StringBuilder();
var source = DictionaryFromType(src);
var target = DictionaryFromType(obj);
try
{
foreach (var it in target)
{
if(ignoreObject != it.Key)
{
object sourceValue = source[it.Key];
if (sourceValue.ToString() != it.Value.ToString())
{
sb.Append(it.Key.ToString());
sb.Append(": ");
sb.Append(source[it.Key].ToString());
sb.Append(" => ");
sb.Append(it.Value.ToString());
sb.Append(" ");
}
}
}
}
catch (Exception ex)
{
string error = ex.ToString();
}
return sb.ToString();
}
반응형
'프로그래밍 > C#' 카테고리의 다른 글
[C#] Object 안에 Array 데이터 가져오기 (1) | 2021.07.21 |
---|---|
N * M * K .. 다중 루프 (0) | 2021.07.05 |
[C#] Path에서 각종 경로 추출 (0) | 2021.06.15 |
[C#] 디자인패턴 - Singleton (0) | 2021.05.11 |
Modbus RTU 구현 (11) | 2020.09.14 |