Serialize/Deserialize NSObject classes to NSDictionary types or JSON ( possibly to XML or PLIST )
Objective-C C
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


  1. Serialize NSObject classes to NSDictionary types or JSON ( possibly to XML or PLIST )
  2. DeSerialize JSON / NSDictionary classes back to NSObject model classes.
  3. Specify property names for NSObjects while deserializing from JSON or NSDictionary keys.
  4. Multi level recursion supported for both Serialization and Deserialzation
  5. Ability to serialize and deserialize NSArray properties also.


  1. Copy the two files KVCBaseObject.h and KVCBaseObject.m to your project folder.
  2. Subclass your model objects from KVCBaseObject and you are good to go!
  3. Since SBJSON is a dependancy, you would have to add that too.


  1. Serialize an NSOBject to JSON / Dictionary

Check out the sample KVCTestObject and KVCChildObject model classes included in the sample project.

// KVCTestObject

    #import <Foundation/Foundation.h>
    #import "KVCChildObject.h"
    #import "KVCBaseObject.h"

    @interface KVCTestObject : KVCBaseObject {
        NSString * kName;
        NSString * addressField;
        NSInteger kAge;
        NSMutableArray * kChildrenArray;  
        NSDictionary * kChildObject;
        BOOL isAvailable;
        double doubleValue;
    @property BOOL isAvailable;
    @property double doubleValue;
    @property (nonatomic, retain) NSString  * kName;
    @property (nonatomic, retain) NSString * addressField;
    @property NSInteger kAge;
    @property (nonatomic, retain) NSMutableArray * kChildrenArray;
    @property (nonatomic, retain) NSDictionary * kChildObject;

    // KVCTestObject.m
    #import "KVCTestObject.h"

    @implementation KVCTestObject

    @synthesize isAvailable;
    @synthesize kName;
    @synthesize kAge;
    @synthesize addressField;
    @synthesize kChildrenArray;
    @synthesize kChildObject;
    @synthesize doubleValue;

    -(id) init {
        if (self = [super init]) {

        return self;   

     * Overriden method of KVCBaseObject to specify type of object that is to
     * be created inside the array kChildrenArray. If left unspecified, the
     * deserializer will simply copy the dictionary objects to kChildrenArray.
    - (NSString *)getComponentTypeForCollection:(NSString *)propertyName {
        if ([propertyName isEqualToString:@"kChildrenArray"]) {
            return @"KVCChildObject";
        return nil;

     * There is no matching property for the json key "kAddress"
     * Therefore implement the below method to specify property name to 
     * use for unspecified keys.
    -(NSString *)getPropertyNameForJsonKey:(NSString *)jsonKey {
        if ([jsonKey isEqualToString:@"kAddress"]) {
            return @"addressField";
        } else if ([jsonKey isEqualToString:@"kAvailable"]) {
            return @"isAvailable";
        return nil;

    // KVCChildObject.h
    #import <Foundation/Foundation.h>
    #import "KVCBaseObject.h"

    @interface KVCChildObject : KVCBaseObject {
        NSString * kChildName;
        NSInteger kNumValues;
    @property (nonatomic, retain) NSString * kChildName;
    @property NSInteger kNumValues;


    // KVCChildObject.m
    #import "KVCChildObject.h"

    @implementation KVCChildObject

    @synthesize kNumValues;
    @synthesize kChildName;

  1. Usage

2.1 To serialize KVCTestObject, simply call

KVCTestObject * obj = [[KVCTestObject alloc] init];
obj.kame = @"Test name";
NSDictionary * serializedDictionary = [obj objectToDictionary];
NSString * jsonString = [obj objectToJson];

2.2 To Deserialize a JSON / Dictionary to KVCTestObject, call

NSString * jString = @"{\"kName\" : \"Test name\",\
                        \"kAddress\" : \"Test Addr\",\
                        \"kAge\" : 39, \
                        \"kChildrenArray\" : \
                       [ { \"kChildName\" : \"child1\", \"kNumValues\" : 32}, \
                         { \"kChildName\" : \"child2\", \"kNumValues\" : 17} ], \
                        \"kChildObject\" : { \"kChildName\" : \"qweqwe\", \"kNumValues\" : 4}, \
                        \"kAvailable\" : 1}";

KVCTestObject * obj = (KVCTestObject *)[KVCTestObject 	objectForJSON:jString];

  1. Note

If your models are made up of NSManagedObjects ( Core Data Objects ), you might want to checkout the comments at

  • (NSMutableDictionary *) getPropertiesAndTypesForClassName:(const char *)className in the file KVCBaseObject.m for some tweaks!

This library was written by for internal usage purposes