2014-01-09 5 views
0

При попытке проанализировать сериализованную строку из объекта в json, я продолжаю получать сообщение об ошибке, которое не может быть проанализировано. Popwe класс состоит из трех знаков после Недвижимости Болгарии Недвижимости (пик, offpeak, выходных)JSON Анализ из Javascript Сериализованный объект

У меня есть объект, который включает в себя ниже классах

public class MinimumsAndParentRates { 
    public MinimumsAndParentRates() { 
     PerCall = new ListPopwes(); 
     PerMinute = new ListPopwes(); 
    } 

    public ListPopwes PerCall { get; set; } 
    public ListPopwes PerMinute { get; set; } 
} 

public class ListPopwes { 
    public ListPopwes() { 
     MinimumMargin = new Popwe(); 
     MinimumRetention = new Popwe(); 
     MasterRate = new Popwe(); 
    } 

    public Popwe MinimumMargin { get; set; } 
    public Popwe MinimumRetention { get; set; } 
    public Popwe MasterRate { get; set; } 
} 

Я тогда установить вид модель свойство как так

viewmodel.JsonData = JsonConvert.SerializeObject(obj); 

когда я выписывать результат я получаю НИЖЕ снабжать струной, тетивой и т.п.

{ 
    "PerCall": 
    { 
     "MinimumMargin": 
     { 
      "Peak":0.00000000, 
      "OffPeak":0.00000000, 
      "Weekend":0.00000000 
     }, 
     "MinimumRetention": 
     { 
      "Peak":0.00000000, 
      "OffPeak":0.00000000, 
      "Weekend":0.00000000 
     }, 
     "MasterRate": 
     { 
      "Peak":0.00000000, 
      "OffPeak":0.00000000, 
      "Weekend":0.00000000 
     } 
    }, 
    "PerMinute": 
    { 
     "MinimumMargin": 
     { 
      "Peak":0.00000000, 
      "OffPeak":0.00000000, 
      "Weekend":0.00000000 
     }, 
     "MinimumRetention": 
     { 
      "Peak":0.20000000, 
      "OffPeak":0.20000000, 
      "Weekend":0.20000000 
     }, 
     "MasterRate": 
     { 
      "Peak":1.00000000, 
      "OffPeak":2.00000000, 
      "Weekend":3.00000000 
     } 
    } 
} 

Однако когда Я пытаюсь разобрать это как JSON, используя jquery. Я получаю ошибку, я попробовал следующее.

console.log("@Model.JsonData"); 
    var array = "@Html.Raw(Json.Encode(Model.JsonData))" //Error occurs on this line when using Html.Raw; 
    var obj = $.parseJSON(array); //Error occurs on this line when not using Html.Raw 
    console.log(array); 

Ниже приведены сообщения об ошибках я получаю

@Html.Raw - SyntaxError: missing ; before statement 

parsing - SyntaxError: JSON.parse: unexpected character 
+2

Какая «ошибка» вы получаете? Что * точно * это говорит? –

+0

@RocketHazmat Я добавил сообщения об ошибках в вопрос – Valeklosse

ответ

1

Проблема состоит в два раза. Во-первых, вы дважды кодируете json, в результате чего двойные кавычки заменяются на ". Во-вторых, после того, как вы остановите двойное кодирование, двойные кавычки внутри строки будут разрываться из-за двойной кавычки снаружи. самым последовательным решением для обоих было бы не обернуть его в двойные кавычки, а не дважды закодировать его.

var array = @Html.Raw(Model.JsonData); 

Хотя, это оставляет вас полностью открыты для инъекций сценария, поэтому я предлагаю вернуться к оборачивать его в двойных кавычках, а затем правильно спасаясь внутренними двойные кавычки, используя \" на серверной стороне.

Конечно, эта инъекция скрипта может произойти только в том случае, если источник этого json может быть злонамеренно изменен.

4

Вы уже сериализовать данные в формате JSON с помощью JsonConvert.SerializeObject(obj); при добавлении его к модели. Вам не нужно сериализовать его второй раз, используя Json.Encode.

Try: var array = "@Html.Raw(Model.JsonData)";

+1

Кроме того, вы можете удалить еще 1 шаг, удалив кавычки, эффективно удалив необходимость преобразования json в массив/объект. Хотя, поскольку вы обертываете его в двойные кавычки, не приведет ли это к синтаксической ошибке, поскольку json содержит неэксклюзивные двойные кавычки? –

+0

@KevinB Удаление котировок действительно сработало. Поэтому вместо var array = "@ Html.Raw (Json.Encode (Model.JsonData))" его фактически var array = @ Html.Raw (Json.Encode (Model.JsonData)), который вызывает ошибку в intellisense on визуальная студия, но компилируется и работает нормально. – Valeklosse

+0

хорошо, вы смешиваете серверный и клиентский код, я ожидаю, что он скажет вам, что это неправильно. : p '@ Html' является недопустимым javascript, поэтому, вероятно, редактор выдает ошибку. –

Смежные вопросы