Turns out I was able to solve this just now by explicitly initializing the NSNumber as an unsigned long 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
This resulted in the output I expected:
{ "fileSize" : 100000000000 }