zoukankan      html  css  js  c++  java
  • IOS 反射获取属性,序列化成JSON

    继上篇序列化成xml,这篇介绍如何序列化成JSON对象。

    只是稍有改动

    ConvertObjToJSON.h

    //
    //  ConvertObjToJSON.h
    // 
    //
    //  Created by Elliott on 13-3-5.
    //  Copyright (c) 2013年 Elliott. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @interface ConvertObjToJSON : NSObject
    
    +(NSString *)Convert:(id)obj;
    
    @end

    ConvertObjToJSON.m

    //
    //  ConvertObjToJSON.m
    //  
    //
    //  Created by Elliott on 13-3-5.
    //  Copyright (c) 2013年 Elliott. All rights reserved.
    //
    #import <objc/runtime.h>
    #import "ConvertObjToJSON.h"
    
    @implementation ConvertObjToJSON
    
    +(NSString *)Convert:(id)obj
    {
        unsigned int outCount, i;
        objc_property_t *properties = class_copyPropertyList([obj class], &outCount);
        NSString *xml=@"{";
        for(i = 0; i < outCount; i++) {
            objc_property_t property = properties[i];
            NSString *key=[[NSString alloc]initWithCString:property_getName(property) encoding:NSUTF8StringEncoding];
            id value=[obj valueForKey:key];
            
            if (value!=nil) {
                //IF NOT NSSTRING,LOOP!!!!!!
                if (![value isKindOfClass:[NSString class]]) {
                    xml=[xml stringByAppendingFormat:@"%@:%@,",key,[ConvertObjToJSON Convert:[obj valueForKey:key]]];
                }
                else
                {
                    xml=[xml stringByAppendingFormat:@"%@:'%@',",key,value];
                }
            }
            else
            {
                xml=[xml stringByAppendingFormat:@"%@:'%@',",key,@""];
            }
        }
        xml=[xml substringToIndex:xml.length-1];
        xml=[xml stringByAppendingString:@"}"];
        
        //NSLog(@"结果:%@",xml);
        
        free(properties);
        
        return xml;
    }
    @end

    调用方式和上一篇xml的一样。

    目前只支持NSSTRING和自定义类。

  • 相关阅读:
    Java学习——文件和IO流
    Java多线程——ThreadLocal类的原理和使用
    Java多线程——线程八锁案例分析
    Django 模版语法 一
    Django 命令行调用模版渲染
    Django 使用 locals() 函数
    Django 加载 app 中的urls
    Django 传递额外参数及 URL别名
    Django 无名参数与有名参数
    Django 项目中添加静态文件夹
  • 原文地址:https://www.cnblogs.com/danye/p/2944524.html
Copyright © 2011-2022 走看看