2014-04-04 1 views
1

У меня есть REST API, который ожидает, что поле размера файла будет в байтах. Однако я наблюдаю, что NSJSONSerialization преобразует мое значение в экспоненциальное представление, которое мой сервер не поддерживает.Сериализовать unsigned long long с использованием NSJSONSerialization

Например:

{ "fileSize" : 1.0e+11 } 

Есть ли способ заставить NSJSONSerialization сохранить беззнаковое длинное длинное форматирование на проводе:

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

На проводе я наблюдаю отправляется следующий?

E.g.

{ "fileSize" : 100000000000 } 

Update: Исправленная мой пример кода благодаря Габриэле Петронелла

+0

Ах да спасибо, дайте мне исправить это до. Благодаря! –

+0

Также почему вы используете 'NSData' в первую очередь? 'NSJSONSerialization' отлично работает со словарями –

+0

NSData - это полезная нагрузка I POST для моей службы REST. –

ответ

0

Оказывается, я был в состоянии решить эту проблему только сейчас, явно инициализирует NSNumber как беззнаковое долго долго.

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 } 
+0

странно, поэтому кажется, что бокс «NSNumber» вызвал эту проблему. –

+0

Да, это странно. Я могу только предположить, что он использует его как подсказку для форматирования? –

+0

синтаксис бокса должен расширяться до 'numberWithUnsignedLongLong:' во время компиляции, поэтому во время выполнения это не имеет значения. В этот момент мне любопытно увидеть, как IR clang производит в обоих случаях. –

1

Я не вижу никакой NSJSONSerialization в вашем вопросе, так или иначе конвертирование словаря в NSData например, кажется неправильным, и это, вероятно, будет причиной этого проблема кодирования. Просто сделать что-то вроде

NSDictionary *myObject = @{"fileSize": @(fileSize)}; 
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:myObject options:0 error:nil]; 
+0

Ах, извините, это опять опечатка с моей стороны. –