使用NSJSONSerialization序列化无符号长long

时间:2014-04-04 23:37:53

标签: ios objective-c rest nsnumber nsjsonserialization

我有一个REST API,它希望文件大小字段以字节为单位。但是我观察到NSJSONSerialization正在将我的值转换为我的服务器不支持的指数表示。

例如:

unsigned long long fileSize = 100000000000;
NSDictionary *myObject = @{"fileSize": @(fileSize)};
NSData *dataToSend = [NSJSONSerialization dataWithJSONObject:myObject options:0 error:nil];
// send dataToSend to network

在线上,我发现发送了以下内容:

{ "fileSize" : 1.0e+11 }

有没有办法强制NSJSONSerialization在线上保留unsigned long long格式?

E.g。

{ "fileSize" : 100000000000 }

更新:感谢Gabriele Petronella

更正了我的示例代码

2 个答案:

答案 0 :(得分:1)

我的问题中没有看到任何NSJSONSerialization,无论如何将字典转换为NSData实例似乎是错误的,并且可能会导致此编码问题。做一些像

这样的事情
NSDictionary *myObject = @{"fileSize": @(fileSize)};
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:myObject options:0 error:nil];

答案 1 :(得分:0)

事实证明,我现在能够通过明确地将NSNumber初始化为无符号长long来解决这个问题。

E.g。

unsigned long long fileSize = 100000000000;
NSDictionary *myObject = @{"fileSize": [NSNumber numberWithUnsignedLongLong:fileSize]};
NSData *dataToSend = [NSJSONSerialization dataWithJSONObject:myObject options:0 error:nil];
// send dataToSend to network

这导致我预期的输出:

{ "fileSize" : 100000000000 }