2012-12-11 8 views
4

Я посылаю объект JSON с помощью AJAX и Web Api на мой сервер:JSON.NET Ошибка чтения JObject

var data = [ 
    ["fdsfsd", "Kifdsfa", "fsdfsa", "fadsf", "fasdfsd", "fadsf", "fasdfsd"], 
    ["2008", "-5", "11", "12", "13"], 
    ["2009", "20", "-11", "14", "13"], 
    ["2010", "30", "15", "-12", "readOnly"] 
]; 

$.ajax({ 
     url: '../webapi/Products', 
     type: 'POST', 
     dataType: "text", 
     data: "="+JSON.stringify(data), 
     success: function (test) { 
       alert(test); 
      }, 
      error: function (test) { 
       alert("Error"); 
      } 

так я получаю на сервере значение, которое я хочу, чтобы разобрать с Json.NET:

public void Post([FromBody]string value) 
{ 
     JObject o = JObject.Parse(@value); 
} 

Это бросает исключение:

Error reading JObject from JsonReader. Current JsonReader item is not an object: 
StartArray. Path '', line 1, position 1. 

Почему? Значение кажется мне правильным?

+0

Вы указали значение на сервере, чтобы проверить правильность синтаксиса? Мой Guess, вы получаете массив json, а не объект json. – HashtagMarkus

+0

да, похоже, это массив. Итак, нет способа конвертировать это в JObject правильно? Как я могу преобразовать этот массив, например. к DataTable? – daniel

ответ

11

JSON.stringify создаст следующую строку JSON:

[ 
    ["fdsfsd", "Kifdsfa", "fsdfsa", "fadsf", "fasdfsd", "fadsf", "fasdfsd"], 
    ["2008", "-5", "11", "12", "13"], 
    ["2009", "20", "-11", "14", "13"], 
    ["2010", "30", "15", "-12", "readOnly"] 
] 

который является jsonArray и не JSONObject. Так что на стороне сервера, вы должны читать его с помощью JArray a = JArray.Parse(@value);

0

Просто поглядывая по этому поводу, я предлагаю изменение

data: "="+JSON.stringify(data), 

в

data: "myJSON="+JSON.stringify(data), 

... так как JQuery ожидает либо объект для сериализации или действительную строку запроса, а затем прослушивание этой опубликованной переменной. Я не думаю, что вы можете просто POST собрать кучу данных, не назначая его как значение пары имя/значение.

+0

это работает, но спасибо за подсказку – daniel

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