From 9ae6e2b5dc2f4551fa84e982172ec45591bbe3c5 Mon Sep 17 00:00:00 2001 From: Tobias Hagemann Date: Tue, 8 Oct 2019 15:08:14 +0200 Subject: [PATCH 1/2] #27: Recursively convert MSObject to NSDictionary when serializing MSObject --- BaseModels/MSObject.m | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/BaseModels/MSObject.m b/BaseModels/MSObject.m index 8b3b1f1f..91d47f8d 100644 --- a/BaseModels/MSObject.m +++ b/BaseModels/MSObject.m @@ -50,6 +50,40 @@ -(NSMutableDictionary *)getDictionary - (NSData *)getSerializedDataWithError:(NSError *__autoreleasing *)error { - return [NSJSONSerialization dataWithJSONObject:self.dictionary options:kNilOptions error:error]; + NSDictionary *convertedDictionary = [self recursivelyConvertObjectsToDictionariesInDictionary:self.dictionary]; + return [NSJSONSerialization dataWithJSONObject:convertedDictionary options:kNilOptions error:error]; } + +- (NSDictionary *)recursivelyConvertObjectsToDictionariesInDictionary:(NSDictionary *)dictionary { + NSMutableDictionary *convertedDictionary = [NSMutableDictionary dictionary]; + for (NSString *key in dictionary) { + if ([dictionary[key] isKindOfClass:[MSObject class]]) { + MSObject *object = dictionary[key]; + convertedDictionary[key] = [self recursivelyConvertObjectsToDictionariesInDictionary:object.dictionary]; + } else if ([dictionary[key] isKindOfClass:[NSArray class]]) { + NSArray *array = dictionary[key]; + convertedDictionary[key] = [self recursivelyConvertObjectsToDictionariesInArray:array]; + } else { + convertedDictionary[key] = dictionary[key]; + } + } + return convertedDictionary; +} + +- (NSArray *)recursivelyConvertObjectsToDictionariesInArray:(NSArray *)array { + NSMutableArray *convertedArray = [NSMutableArray array]; + for (id item in array) { + if ([item isKindOfClass:[MSObject class]]) { + MSObject *object = item; + [convertedArray addObject:[self recursivelyConvertObjectsToDictionariesInDictionary:object.dictionary]]; + } else if ([item isKindOfClass:[NSArray class]]) { + NSArray *array = item; + [convertedArray addObject:[self recursivelyConvertObjectsToDictionariesInArray:array]]; + } else { + [convertedArray addObject:item]; + } + } + return convertedArray; +} + @end From 5509793f829bafd3a6684f8dac68e3614c94765a Mon Sep 17 00:00:00 2001 From: Tobias Hagemann Date: Wed, 25 Mar 2020 15:16:22 +0100 Subject: [PATCH 2/2] Added support for enum objects Cherry-picked from: https://github.com/tritter/msgraph-sdk-objc-models/commit/d1ead2e67459531ba1a791911f3d43edd3d6cfb4 https://github.com/tritter/msgraph-sdk-objc-models/commit/c359bc90fab46546f2d62b8cb91f5f8b18a318bc https://github.com/tritter/msgraph-sdk-objc-models/commit/c94d2b4cb316fc70803c02439016c11a216de710 --- BaseModels/MSObject.m | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/BaseModels/MSObject.m b/BaseModels/MSObject.m index 91d47f8d..4d808ecb 100644 --- a/BaseModels/MSObject.m +++ b/BaseModels/MSObject.m @@ -63,6 +63,9 @@ - (NSDictionary *)recursivelyConvertObjectsToDictionariesInDictionary:(NSDiction } else if ([dictionary[key] isKindOfClass:[NSArray class]]) { NSArray *array = dictionary[key]; convertedDictionary[key] = [self recursivelyConvertObjectsToDictionariesInArray:array]; + } else if ([dictionary[key] respondsToSelector:@selector(ms_toString)]) { + NSString *enumValue = [dictionary[key] performSelector:@selector(ms_toString)]; + convertedDictionary[key] = enumValue; } else { convertedDictionary[key] = dictionary[key]; } @@ -79,6 +82,9 @@ - (NSArray *)recursivelyConvertObjectsToDictionariesInArray:(NSArray *)array { } else if ([item isKindOfClass:[NSArray class]]) { NSArray *array = item; [convertedArray addObject:[self recursivelyConvertObjectsToDictionariesInArray:array]]; + } else if ([item respondsToSelector:@selector(ms_toString)]) { + NSString *enumValue = [item performSelector:@selector(ms_toString)]; + [convertedArray addObject:enumValue]; } else { [convertedArray addObject:item]; }