操作のシリアル化に jsonmodel を使用しています。サーバーに投稿を送信し、json データを取得します。データをこのオブジェクトに逆シリアル化します。
#import <Foundation/Foundation.h>
#import "JSONModel.h"
@interface ResultObject : JSONModel
@property (strong, nonatomic) NSObject<Optional> *Data;
@property (strong, nonatomic) NSString *ResultCode;
@property (strong, nonatomic) NSString *ResultMessage;
@property (strong, nonatomic) NSObject<Optional> *Exception;
@end
簡単なデータを取得できます。ブール値または文字列のように。しかし、データをカスタムオブジェクトにキャストしようとすると. データが破損していました。このコードを使用してキャストしています。
ResultObject *resultObject = [[ResultObject alloc]initWithString:result error:&error];
NSString *returnAnswer = [NSString stringWithFormat:@"%@",resultObject.Data];
LanguagePack *pack =[[LanguagePack alloc]initWithString:returnAnswer usingEncoding:NSASCIIStringEncoding error:&error];
returnAnswer では、コロン (:) が equals(=) に変更され、comas(,) がセミコロン (;) に変更されるため、「pack」は null になります。json データをデシリアライズできません。
これは私の言語パックです
@interface LanguagePack : JSONModel
@property(strong,nonatomic) NSArray<LanguageString> *Data;
@end
これは私のLanguageStringです
@protocol LanguageString;
@interface LanguageString : JSONModel
@property (strong, nonatomic) NSString *DataKey;
@property (strong, nonatomic) NSString *DataValue;
@property (strong, nonatomic) NSString *DataDescription;
@property (strong, nonatomic) NSString *DataLanguage;
@end
私の質問は、NSObject(Data) 内の json データをカスタム オブジェクトに逆シリアル化するにはどうすればよいですか?
編集注: ResultObject.Data を見ると、14 個のオブジェクトがあります (あるべき姿) が、すべてのオブジェクトにエラーがあります:
予想される ']' エラー: 式の解析中に 1 つのエラーが発生しました
このような。
そして、私がそれに変更NSObject<Optional> *Data
するNSArray<LanguageString> *Data
と、正しく動作します。しかし、NSObject のようなジェネリック型が必要です。
私のJson
{
"Data":[
{
"DataKey":"AppTemplate.CancelButton.Text",
"DataValue":"Iptal",
"DataDescription":"",
"DataLanguage":"TR"
},
{
"DataKey":"Exception.Code.07",
"DataValue":"SMS dogrulama kodu hatali ya da zaman asimina ugramis.",
"DataDescription":"SmsVerificationCodeNotVerifiedException",
"DataLanguage":"TR"
},
{
"DataKey":"Exception.Code.11",
"DataValue":"Geçersiz dil bilgisi.",
"DataDescription":"InvalidLanguageException",
"DataLanguage":"TR"
}
],
"ResultCode":"00",
"ResultMessage":"Success",
"Exception":null
}
私の英語で申し訳ありませんが、助けてくれてありがとう。