2014-02-04 2 views
3

По какой-то причине, когда у меня есть специальный символ в моей модели нокаута и преобразовывается в объект json, строка заканчивается там, где должен использоваться специальный символ, и я получаю сообщение об ошибке при десериализации:JsonConvert.DeserializeObject специальные символы Unterminated string. Ожидаемый разделитель:

$.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); } 
    }); 

Когда я к этому методу:

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

Я получаю сообщение об ошибке:

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

ответ

0

Если строка JSON содержит специальную ч атракторы, такие как двойные кавычки ", обратные косые черты \ или косые черты /, им нужно сбежать с обратными косыми чертами. Нет синтаксического анализатора JSON, который сможет обрабатывать строку JSON, которая не была должным образом отформатирована.

Таким образом, вы должны убедиться, что ваш theModel отформатирован соответствующим образом и соответствует стандартам JSON.org.

+0

Можете ли вы дать мне пример? – user3272686

+0

я нашел ответ на мой собственный вопрос: побег (ko.toJSON (theModel)) Все, что мне нужно, это функция побег, и он прекрасно работает. – user3272686

0

Я нашел ответ на свой вопрос: escape (ko.toJSON (theModel)) Все, что мне нужно, это функция escape, и она отлично работает.

+0

??, C# не имеет понятия, что такое «побег» – dmikester1

+0

Это функция javascript, которая устарела (v1.5), см. Мой ответ для текущего ответа. C# версия этого будет Uri.UnescapeDataString() –

1

У меня такая же ошибка несколько раз. Я обновил свой web.config с большей максимальной длиной, чтобы избежать усечения.

<httpRuntime maxQueryStringLength="2097151" maxUrlLength="2097151" /> 

<security> 
    <requestFiltering> 
    <requestLimits maxQueryString="2097151" maxUrl="2097151" /> 
    </requestFiltering> 
</security> 

Функция encodeURIComponent() кодирует компонент URI.

Эта функция кодирует специальные символы. Кроме того, он кодирует следующие символы:, /? : @ & = + $ #

Это была добавлена ​​к моему АЯКС запросов:

$.ajax("URL", { 
    type: "POST", 
    cache: false, 
    data: { a: encodeURIComponent(jsonData), b: userID } 
}) 
Смежные вопросы