|
| 1 | +function numberHasDecimals(item: number) { |
| 2 | + return !(item % 1 === 0); |
| 3 | +} |
| 4 | + |
| 5 | +function numberIs64Bit(item: number) { |
| 6 | + return item < -Math.pow(2, 31) + 1 || item > Math.pow(2, 31) - 1; |
| 7 | +} |
| 8 | + |
1 | 9 | export function serialize(data: any): any { |
2 | 10 | if (global.isIOS) { |
3 | 11 | switch (typeof data) { |
4 | 12 | case 'string': |
5 | | - case 'boolean': |
6 | | - case 'number': { |
| 13 | + case 'boolean': { |
7 | 14 | return data; |
8 | 15 | } |
| 16 | + case 'number': { |
| 17 | + const hasDecimals = numberHasDecimals(data); |
| 18 | + if (numberIs64Bit(data)) { |
| 19 | + if (hasDecimals) { |
| 20 | + return NSNumber.alloc().initWithDouble(data); |
| 21 | + } else { |
| 22 | + return NSNumber.alloc().initWithLongLong(data); |
| 23 | + } |
| 24 | + } else { |
| 25 | + if (hasDecimals) { |
| 26 | + return NSNumber.alloc().initWithFloat(data); |
| 27 | + } else { |
| 28 | + return data; |
| 29 | + } |
| 30 | + } |
| 31 | + } |
9 | 32 |
|
10 | 33 | case 'object': { |
11 | 34 | if (data instanceof Date) { |
12 | | - return data.toJSON(); |
| 35 | + return NSDate.dateWithTimeIntervalSince1970(data.getTime() / 1000); |
13 | 36 | } |
14 | 37 |
|
15 | 38 | if (!data) { |
@@ -37,27 +60,44 @@ export function serialize(data: any): any { |
37 | 60 | let store; |
38 | 61 | switch (typeof data) { |
39 | 62 | case 'string': |
40 | | - case 'boolean': |
41 | | - case 'number': { |
| 63 | + case 'boolean': { |
42 | 64 | return data; |
43 | 65 | } |
| 66 | + case 'number': { |
| 67 | + const hasDecimals = numberHasDecimals(data); |
| 68 | + if (numberIs64Bit(data)) { |
| 69 | + if (hasDecimals) { |
| 70 | + return java.lang.Double.valueOf(data); |
| 71 | + } else { |
| 72 | + return java.lang.Long.valueOf(data); |
| 73 | + } |
| 74 | + } else { |
| 75 | + if (hasDecimals) { |
| 76 | + return java.lang.Float.valueOf(data); |
| 77 | + } else { |
| 78 | + return data; |
| 79 | + } |
| 80 | + } |
| 81 | + } |
44 | 82 |
|
45 | 83 | case 'object': { |
46 | 84 | if (!data) { |
47 | 85 | return null; |
48 | 86 | } |
49 | 87 |
|
50 | 88 | if (data instanceof Date) { |
51 | | - return data.toJSON(); |
| 89 | + return new java.util.Date(data.getTime()); |
52 | 90 | } |
| 91 | + |
53 | 92 | if (Array.isArray(data)) { |
54 | | - store = new org.json.JSONArray(); |
55 | | - data.forEach((item) => store.put(serialize(item))); |
| 93 | + store = new java.util.ArrayList(); |
| 94 | + data.forEach((item) => store.add(serialize(item))); |
56 | 95 | return store; |
57 | 96 | } |
58 | 97 |
|
59 | | - store = new org.json.JSONObject(); |
| 98 | + store = new java.util.HashMap(); |
60 | 99 | Object.keys(data).forEach((key) => store.put(key, serialize(data[key]))); |
| 100 | + console.log(store.toString()); |
61 | 101 | return store; |
62 | 102 | } |
63 | 103 |
|
@@ -132,15 +172,15 @@ export function deserialize(data: any): any { |
132 | 172 | } |
133 | 173 |
|
134 | 174 | case 'java.util.HashMap': |
135 | | - case 'java.util.Map': { |
136 | | - store = {}; |
137 | | - const keys = data.keySet().toArray(); |
138 | | - for (let k = 0; k < keys.length; k++) { |
139 | | - const key = keys[k]; |
140 | | - store[key] = deserialize(data.get(key)); |
141 | | - } |
142 | | - break; |
| 175 | + case 'java.util.Map': { |
| 176 | + store = {}; |
| 177 | + const keys = data.keySet().toArray(); |
| 178 | + for (let k = 0; k < keys.length; k++) { |
| 179 | + const key = keys[k]; |
| 180 | + store[key] = deserialize(data.get(key)); |
143 | 181 | } |
| 182 | + break; |
| 183 | + } |
144 | 184 |
|
145 | 185 | default: |
146 | 186 | store = null; |
|
0 commit comments