while unexpected newtonsoft encountered convert c# jquery asp.net-mvc json knockout.js

c# - newtonsoft - unexpected character encountered while parsing value path workflow file line 1 position 17



Caracteres especiales JsonConvert.DeserializeObject Cadena sin terminar. Delimitador esperado: (3)

Si una cadena JSON contiene caracteres especiales como comillas dobles ", barras diagonales inversas" o barras diagonales /, deben escaparse con barras diagonales inversas. No hay un analizador JSON que pueda tratar con una cadena JSON que no está formateada correctamente en la primera lugar.

Por lo tanto, debe asegurarse de que su theModel esté formateado adecuadamente y de acuerdo con los estándares de JSON.org .

Por alguna razón, cuando tengo un personaje especial en mi modelo knockout y lo convierto en un objeto json, la cadena termina donde se supone que está el carácter especial y aparece un error al deserializarlo:

$.ajax({ url: "/Admin/Forms/Convert", type: "post", //contentType: "application/json", dataType: "text", data: "modelData=" + ko.toJSON(theModel), success: function (data) { // window.open("/Admin/Forms/DisplayClient"); var win = getFullWindow(''/Admin/Forms/DisplayClient''); win.open(); }, error: function (xhr, status, msg) { alert(msg); } });

Cuando llego a este método:

public void Convert(string modelData) { Form form = JsonConvert.DeserializeObject<Form>(modelData); }

Me sale un error:

Unterminated string. Expected delimiter: ". Path ''Name'', line 1, position 178.


Encontré una respuesta a mi propia pregunta: escape (ko.toJSON (theModel)) Todo lo que necesito es la función de escape y funciona muy bien.


He recibido el mismo error varias veces. He actualizado mi web.config con mayores longitudes máximas para asegurar que no haya truncamiento.

<httpRuntime maxQueryStringLength="2097151" maxUrlLength="2097151" /> <security> <requestFiltering> <requestLimits maxQueryString="2097151" maxUrl="2097151" /> </requestFiltering> </security>

La función encodeURIComponent () codifica un componente URI.

Esta función codifica caracteres especiales. Además, codifica los siguientes caracteres:, /? : @ & = + $ #

Esto ahora se ha agregado a mis solicitudes ajax:

$.ajax("URL", { type: "POST", cache: false, data: { a: encodeURIComponent(jsonData), b: userID } })