c# - consumir - El objeto JSOn no se deserializa correctamente en el lado del servicio web wcf
xamarin forms soap web service (2)
Estoy trabajando en el proyecto de iOS y enviando la cadena Json al backend a través del servicio web wcf. Funciona con éxito para muchos usuarios, pero para algunos usuarios es una cadena json incompleta.
Código para generar cadena Json
NSData *data = [NSJSONSerialization dataWithJSONObject:EmployeeDetails options:0 error:nil];
NSString *JsonString = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
Y Adjuntando la cadena json con la solicitud por debajo del código
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];
EmployeeDetails es NSMutableDictionary con detalles de los empleados.
Y
Aquí está la cadena Json exitosa deserializada de BackEnd
{"FirstName":"Donald","LastCBPaymentType":6,"AcceptEmail":true,"CellPhone":"321-300-6874","Position":"3","CarrierNum":"4","EmpNum":"96874"}
Y cadena Json incompleta
{"FirstName":"roset","LastCBPaymentType":6,"AcceptEmail":true,"CellPhone":"321-300-6874","Position":"3","CarrierNum":"4","EmpNum":"98799
La cadena json incompleta que se produce en el back-end para algunos usuarios.
Cualquiera puede ayudar a resolver este problema?
Tuve un problema similar en PHP / CodeIgniter recientemente y el problema era que el JSON estaba siendo "desinfectado" a través de algunas expresiones regulares demasiado ambiciosas antes de que llegara a mi controlador. Tal vez hay alguna desinfección similar que ocurre en WCF?
Cosas que probaría:
¿Utiliza Charles Proxy para confirmar que la solicitud (POST?) Está enviando todo el cuerpo como esperaba.
Pruebe la aplicación de tipo de contenido / json en su lugar.
Bueno, diría que TomSwift está en el camino correcto ... Es evidente que el JSON roto simplemente no tiene "}" desde el final de la cadena. De hecho, parece que se está desinfectando por una expresión regular ... Realmente deberías encuentra la fuente del problema; pero para una solución rápida y sucia mientras lo resuelves , puedes simplemente ejecutar tu propia expresión regular en el JSON que recibes y si no termina con un "}, solo agrégala ... Primero haga algo como: ''/ "[0-9] + $ /'' (para verificar si hay una cadena numérica abierta al final, si la hay, la cierra agregando") luego verifique si ''/} $ / ''(if} es el último carácter, si no lo es: agrégalo).
Recuerda, lo anterior solo sería una solución temporal (ya que es algo pesado y no tan bonito), pero podría imaginarme obligado a hacer algo así, simplemente por falta de tiempo. Si el problema proviene realmente de la API, podrías contarles a los creadores y usar algo parecido a esa corrección más arriba mientras lo arreglan.
PD. Si alguien elige usar una solución como la anterior, por favor, por favor, por el amor de todo lo que hace santo, deje un comentario en el código explicando por qué lo hizo (en lugar de decirnos lo que hizo ...) .