Comment convertir NSDictionary en objet personnalisé
J'ai un objet json:
@interface Order : NSObject
@property (nonatomic, retain) NSString *OrderId;
@property (nonatomic, retain) NSString *Title;
@property (nonatomic, retain) NSString *Weight;
- (NSMutableDictionary *)toNSDictionary;
...
- (NSMutableDictionary *)toNSDictionary
{
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setValue:self.OrderId forKey:@"OrderId"];
[dictionary setValue:self.Title forKey:@"Title"];
[dictionary setValue:self.Weight forKey:@"Weight"];
return dictionary;
}
Dans le string c'est:
{
"Title" : "test",
"Weight" : "32",
"OrderId" : "55"
}
Je reçois chaîne JSON avec le code:
NSMutableDictionary* str = [o toNSDictionary];
NSError *writeError = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:str options:NSJSONWritingPrettyPrinted error:&writeError];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
Maintenant, j'ai besoin de créer et objet de mappage de chaîne JSON:
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *e;
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:nil error:&e];
Cela me renvoie rempli NSDictionary.
Que dois-je faire pour obtenir l'objet de ce dictionnaire?
source d'informationauteur 1110
Vous devez vous connecter pour publier un commentaire.
Ajouter un nouveau
initWithDictionary:
méthode pourOrder
:N'oubliez pas d'ajouter
initWithDictionary
's la signature deOrder.h
fichierDans la méthode où vous obtenez JSON:
Si les noms de propriété sur l'objet de votre match les clés dans la chaîne JSON, vous pouvez effectuer les opérations suivantes:
Pour cartographier la chaîne JSON à votre Objet, vous devez convertir la chaîne en un NSDictionary en premier et ensuite vous pouvez utiliser une méthode de NSObject qui utilise la Valeur-Clé de Codage pour chaque propriété.
Si les touches ne correspondent pas, vous pouvez remplacer la méthode d'instance de NSObject
-[NSObject valueForUndefinedKey:]
dans votre classe d'objet.À la carte vous Objet JSON, vous pouvez utiliser l'Objective-C runtime pour le faire automatiquement. Le suivant fonctionne avec n'importe quelle sous-classe NSObject:
En supposant que vos noms de propriétés et le dictionnaire touches sont les mêmes, vous pouvez utiliser cette fonction pour convertir n'importe quel objet
ce sera plus pratique pour vous :
La meilleure façon de le faire est par l'utilisation d'une bibliothèque de sérialisation/désérialisation
de nombreuses bibliothèques sont disponibles, mais celui que j'aime est
JagPropertyConverter
https://github.com/jagill/JAGPropertyConverter
il peut convertir votre objet Personnalisé dans NSDictionary et vice versa
même s'il soutenir la conversion de dictionnaire ou d'une matrice, ou tout autre objet à l'intérieur de votre objet (j'.e Composition)
Définir votre classe personnalisée hérite de "AutoBindObject". Déclarer des propriétés qui a le même nom avec les touches en NSDictionary. Puis d'appeler la méthode:
En fait, nous pouvons personnaliser la classe de la carte de propriété différents noms de touches dans le dictionnaire. A côté de cela, nous pouvons lier des objets imbriqués.
Jetez un oeil à cette démo. L'utilisation est facile:
https://github.com/caohuuloc/AutoBindObject