#import <Foundation/NSObjCRuntime.h>
#import <objc/runtime.h>
- (NSString *)serializeObject:(id)theObject
{
NSString *className = NSStringFromClass([theObject class]);
const char *cClassName = [className UTF8String];
id theClass = objc_getClass(cClassName);
unsigned int outCount, i;
objc_property_t *properties = class_copyPropertyList(theClass, &outCount);
NSMutableArray *propertyNames = [[NSMutableArray alloc] initWithCapacity:1];
for (i = 0; i < outCount; i++) {
objc_property_t property = properties[i];
NSString *propertyNameString = [[NSString alloc] initWithCString:property_getName(property) encoding:NSUTF8StringEncoding];
[propertyNames addObject:propertyNameString];
[propertyNameString release];
NSLog(@"%s %s\n", property_getName(property), property_getAttributes(property));
}
NSMutableDictionary *finalDict = [[NSMutableDictionary alloc] initWithCapacity:1];
for(NSString *key in propertyNames)
{
SEL selector = NSSelectorFromString(key);
id value = [theObject performSelector:selector];
if (value == nil)
{
value = [NSNull null];
}
[finalDict setObject:value forKey:key];
}
[propertyNames release];
NSString *retString = [[CJSONSerializer serializer] serializeDictionary:finalDict];
[finalDict release];
return retString;
}
IOS 反射机制
最新推荐文章于 2020-08-20 16:22:46 发布