2013-08-28 3 views
2

주로 ServiceStack의 Redis 클라이언트에 관심이 있습니다. 캐시에 저장하려는 항목이 여러 개 있습니다. 멤버는 대부분 캡슐화되어 (비공개), 일부 멤버는 공용 접근자가 없습니다. ServiceStack의 시리얼 라이저를 사용하면 Redis에서 엔티티를 저장 (그리고 분명히 얻을 수 있습니까?)합니까? 아니면 직렬화를위한 공개 속성을 가진 "깨끗한"POCO 클래스를 만들어야 만 어떤 엔터티에 대한 2 가지 표현을 유지할 수 있습니까? 진짜이고, Redis에 저장하기위한 POCO 표현입니까?ServiceStack의 JsonSerializer가 전용 멤버를 직렬화 할 수 있습니까?

나는 대답이 후자가 아니길 바란다. :)

답변

1
public static string SerializeObject(object obj, BindingFlags membersType) {    
     var typeConfigType = typeof(TypeConfig<>).MakeGenericType(obj.GetType()); 

     var prop = typeConfigType.GetMembers(BindingFlags.Public | BindingFlags.Static).FirstOrDefault(item => item.Name == "Fields") as PropertyInfo; 
     prop.SetValue(null, obj.GetType().GetFields(membersType), null); 

     prop = typeConfigType.GetMembers(BindingFlags.Public | BindingFlags.Static).FirstOrDefault(item => item.Name == "Properties") as PropertyInfo; 
     prop.SetValue(null, new PropertyInfo[0], null); 

     return JsonSerializer.SerializeToString(obj); 
}