Objective-C Json反序列化(空值不能反序列化)

Posted

技术标签:

【中文标题】Objective-C Json反序列化(空值不能反序列化)【英文标题】:Objective-C Json Deserializing (null values cannot be deserialized) 【发布时间】:2013-12-16 21:04:58 【问题描述】:

我正在从 ios 向我的网络服务发布 http 帖子,该服务是在 .NET 平台上编写的。

我使用JSONModel 进行序列化/反序列化,使用AFNetworking 发出http 请求。

我可以提出请求并成功获得响应。但是当响应数据上的任何变量为空时,就会出现问题。

这是我如何调用我的网络服务:

NSDictionary *parameters = @@"Username":username,@"Password":password;
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:@"<my_url>" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) 
    // Request succeeded.
    LoginResponse *response =[[LoginResponse alloc]initWithDictionary:responseObject error:nil];
    // !!! "response" is null here because of Message on response data is null.
failure:^(AFHTTPRequestOperation *operation, NSError *error) 
    // Request failed.
];

这是我的LoginResponse.h 文件:

@interface LoginResponse : JSONModel

@property (nonatomic, strong) NSString *IsSuccess;
@property (nonatomic, strong) NSString *Message;

@end

这是我通过 Fiddler 请求时 Web 服务返回的内容:

"IsSuccess":true,"Message":null

由于我的响应数据有空值,反序列化不起作用。当我从LoginResponse.h 文件中删除(因为响应数据上的消息为空)@property (nonatomic, strong) NSString *Message; 行时,反序列化工作正常。

我不关心响应数据是否有空变量,我只想反序列化它。我无法估计问题是什么。为什么响应具有空变量时反序列化不起作用?

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

LoginResponse 中声明Message 可选:

@property (nonatomic, strong) NSString<Optional>* Message;

请参阅JSONModel docs 了解更多信息。

【讨论】:

糟糕,我错过了!谢谢。

以上是关于Objective-C Json反序列化(空值不能反序列化)的主要内容,如果未能解决你的问题,请参考以下文章

将 Objective-C 对象序列化和反序列化为 JSON

Objective-C Mantle,反序列化 JSON 字典

Flutter - 提取到 FutureBuilder 的 JSON 反序列化数据返回空值

MVC4 操作中的反序列化对象导致空值

NewtonSoft.JSON 反序列化 - 未正确反序列化。 (VB.NET)

在 Objective-C 中检查来自 Json 响应的空值