我主要是c#开发人员,但我的任务是解决Objective-C Mac客户端中的错误。我正在使用nsjsonserialization序列化json对象。
如果json对象包含版权符号,则该错误会在反序列化时发生。
我们使用的是sbjson,我切换到nsjsonserialization,但这不能解决问题。我不知道我做错了还是需要使用其他序列化库。在C#中,我可以只使用newtonsoft。我应该使用与Objective-C类似的标准json序列化库吗?
这是序列化代码:
-(void)sendMessage:(NSString *)method:(NSDictionary *)inData {
NSDictionary *outData = [[NSDictionary alloc] init];
@try {
JsonServiceComm *newCom = [[JsonServiceComm alloc] init];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@", host, method]];
NSData *json = [NSJSONSerialization dataWithJSONObject:inData options:kNilOptions error:nil];
json = [json subdataWithRange:NSMakeRange(0, [json length] - 1)];
NSString* jsData = [NSString stringWithUTF8String:[json bytes]];
NSString *outData = [newCom userSpaceRequest:url :jsData];
} @catch (NSException* ex) {
NSLog(@"%@", [ex reason]);
}
}
这里是反序列化的地方:
-(void)handleMessage:(NSString *)messageType message:(NSString *)message {
@autoreleasepool {
NSData *jsMessage = [message dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
NSDictionary *data = [NSJSONSerialization JSONObjectWithData:jsMessage options:NSJSONReadingMutableLeaves error:&error];
}}
如果数据不包含版权符号,则* data填充有值的字典,但是,如果数据确实包含版权符号,则* data无效。返回的错误是“解析对象时文件意外结束。”
答案 0 :(得分:0)
此问题已解决。我发现json是通过单独的json解析器传递的,该解析器未进行utf8编码。
答案 1 :(得分:-2)
尝试使用options:0而不是options:NSJSONReadingMutableLeaves