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和自定义类。

  • 相关阅读:
    (二)处理视频
    vim下多行注释与解注释
    (一)读取显示图片
    解决死锁的方法
    死锁、活锁和饿死的理解(转)
    C# winfrom 窗体的StartPosition 属性
    Show()和ShowDialog()
    WinForm应用程序之注册模块的设计与实现
    Epplus使用教程1(基本介绍)
    C#中操作txt,抛出“正由另一进程使用,因此该进程无法访问此文件”
  • 原文地址:https://www.cnblogs.com/danye/p/2944524.html
Copyright © 2011-2022 走看看