2016-03-04 25 views
16

Sto lavorando al progetto iOS e all'invio della stringa Json per eseguire il back-end tramite wcf webservice. Funziona correttamente per molti utenti ma per alcuni utenti esegue il backend ricevendo una stringa json incompleta.JSOn oggetto non deserializing correttamente nel lato webserver wcf

codice per la generazione di JSON stringa

NSData *data = [NSJSONSerialization dataWithJSONObject:EmployeeDetails options:0 error:nil]; 
    NSString *JsonString = [[NSString alloc] initWithData:data 
               encoding:NSUTF8StringEncoding]; 

e allegando la stringa JSON con richiesta di codice di seguito

[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setHTTPBody:[jsonString dataUsingEncoding:NSUTF8StringEncoding]]; 

EmployeeDetails è NSMutableDictionary con i dettagli dei dipendenti.

E

Qui è successo stringa JSON deserializzati da BackEnd

{"FirstName":"Donald","LastCBPaymentType":6,"AcceptEmail":true,"CellPhone":"321-300-6874","Position":"3","CarrierNum":"4","EmpNum":"96874"} 

E stringa JSON incompleta

{"FirstName":"roset","LastCBPaymentType":6,"AcceptEmail":true,"CellPhone":"321-300-6874","Position":"3","CarrierNum":"4","EmpNum":"98799 

La stringa JSON incompleta si verificano nel backend per qualche utente.

Qualcuno può aiutare a risolvere questo problema?

+0

il risultato ottenuto qui 'EmployeeDetails' –

+0

@ Anbu.Karthik stiamo ottenendo dati incompleti ({" FirstName ":" roset "," LastCBPaymentType ": 6," AcceptEmail ": true," CellPhone ":" 321 -300-6874 "," Posizione ":" 3 "," CarrierNum ":" 4 "," EmpNum ":" 9879), Il suo unico evento per alcuni utenti –

+0

significa che hai ricevuto la risposta dal server ma formart irrazionale, corretto –

risposta

0

Ho avuto un problema simile in PHP/CodeIgniter di recente e il problema era che il JSON veniva "disinfettato" tramite alcune espressioni regolari eccessivamente ambiziose prima che arrivasse al mio gestore. Forse c'è qualche sanificazione simile che si verifica in WCF?

cose che vorrei provare:

  1. Utilizzando Charles Proxy per confermare che la richiesta (POST?) È in realtà inviando il corpo pieno come previsto.

  2. Prova invece Content-Type application/json.

1

Beh, direi TomSwift è sulla strada giusta ... E 'evidente che le rotture di JSON è semplicemente manca "} dalla fine della stringa. Ciò in effetti assomigliano a qualcosa di essere sterilizzata da una regex ... Dovresti davvero trovare la fonte del problema, ma per una soluzione rapida e sporca mentre lo vedi, potresti semplicemente eseguire la tua espressione regolare sul JSON che ricevi e se non finisce con un "}, basta aggiungerlo ... Prima fai qualcosa come: '/" [0-9] + $ /' (per verificare se c'è una stringa numerica aperta alla fine, se c'è, la chiudi aggiungendo ") quindi controlla se '/} $ /' (se} è l'ultimo carattere, se non lo è: aggiungilo).

Ricordate, quanto sopra sarebbe solo una soluzione temporanea (in quanto è un po 'pesante e non proprio così carina), ma potrei immaginare di essere costretto a fare qualcosa di simile, semplicemente a causa di vincoli di tempo. Se il problema proviene effettivamente dall'API, puoi comunicarlo ai creator e utilizzare qualcosa di simile alla soluzione sopra mentre lo risolvono.

PS. Se qualcuno sceglie di utilizzare una correzione come sopra, per favore, per favore, per l'amore di tutto ciò che ritieni sacro, lascia un commento nel codice che spiega perché lo hai fatto (al contrario di dirci cosa hai fatto ...).