zoukankan      html  css  js  c++  java
  • 对象转字典 iOS

    最近在开发SDK,我开放给客户model类设置信息后,对象转字典,POST给后台。

    思路:通过Runtime访问属性列表,快速转换成字典。

    FRObjectToDictionary.h类

    #import <Foundation/Foundation.h>

     

    @interface FRObjectToDictionary : NSObject

    + (NSDictionary*)getObjectData:(id)obj;

    @end

     

     

    FRObjectToDictionary.m类

     

     

    #import "FRObjectToDictionary.h"

    #import <objc/runtime.h>

    @implementation FRObjectToDictionary

     

    + (NSDictionary*)getObjectData:(id)obj

    {

        NSMutableDictionary *dic = [NSMutableDictionary dictionary];

        unsigned int propsCount;

        objc_property_t *props = class_copyPropertyList([obj class], &propsCount);//获得属性列表

        for(int i = 0;i < propsCount; i++)

        {

            objc_property_t prop = props[i];

            

            NSString *propName = [NSString stringWithUTF8String:property_getName(prop)];//获得属性的名称

            id value = [obj valueForKey:propName];//kvc读值

            if(value == nil)

            {

                value = [NSNull null];

            }

            else

            {

                value = [self getObjectInternal:value];//自定义处理数组,字典,其他类

            }

            [dic setObject:value forKey:propName];

        }

        return dic;

    }

     

     

    + (id)getObjectInternal:(id)obj

    {

        if([obj isKindOfClass:[NSString class]]

           || [obj isKindOfClass:[NSNumber class]]

           || [obj isKindOfClass:[NSNull class]])

        {

            return obj;

        }

        

        if([obj isKindOfClass:[NSArray class]])

        {

            NSArray *objarr = obj;

            NSMutableArray *arr = [NSMutableArray arrayWithCapacity:objarr.count];

            for(int i = 0;i < objarr.count; i++)

            {

                [arr setObject:[self getObjectInternal:[objarr objectAtIndex:i]] atIndexedSubscript:i];

            }

            return arr;

        }

        

        if([obj isKindOfClass:[NSDictionary class]])

        {

            NSDictionary *objdic = obj;

            NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:[objdic count]];

            for(NSString *key in objdic.allKeys)

            {

                [dic setObject:[self getObjectInternal:[objdic objectForKey:key]] forKey:key];

            }

            return dic;

        }

        return [self getObjectData:obj];

    }

     

     

    @end

     

     

    调用时:

    [FRObjectToDictionary getObjectData:aModel]

  • 相关阅读:
    网上Silverlight项目收集
    在Silverlight页面里显示HTML的免费控件下载(附使用方法代码)
    Silverlight SNS项目
    Visual Studio 2010下的RIA开发,Silverlight 4线下技术交流会期待您的参与!
    Windows7硬件展示与客户端信息收集
    Silverlight版的神奇罗盘,仿Google的Flash神奇罗盘
    (解题思路)Entity Framework 如动态创建表或者列
    (学)这些年来的几宗罪
    (学)在SQL2005中使用分区表技术
    (医)有痔青年的福音
  • 原文地址:https://www.cnblogs.com/huangzs/p/7743731.html
Copyright © 2011-2022 走看看