2013-08-28 3 views
0

У меня есть мой контроллер, который может отправить объект json и снова получить тот же объект. Моя проблема в том, что AjaxSaveFoo создает объект Foo, но я всегда возвращаю пустой объект. Как создать десериализацию ?Deserialization with Newtonsoft.Json

/// <summary> 
/// Returns a foo 
/// </summary> 
/// <returns></returns> 
public JsonNetResult AjaxLoadFoo() 
{ 
    return new JsonNetResult 
    { 
     Data = new Foo() 
    }; 
} 

/// <summary> 
/// Saves a foo 
/// </summary> 
/// <returns></returns> 
public JsonNetResult AjaxSaveFoo(Foo foo) //who tries to deserialize this!!, its always empty 
{ 

    return new JsonNetResult 
    { 
     Data = foo 
    }; 

} 

Мой клиент сторона ..

$.ajax({ 
    type: "POST", 
    url: "AjaxSaveFoo", 
    data: JSON.stringify(this._FooObj), 
    success: this.saveSucces, 
    dataType: "json", 
    contentType: "application/json; charset=utf-8", 
    error: this.saveFailure 
}); 

Foo, когда его послали вниз ..
{

"CustomerNumber": 2, 
"CustomerStatus": "1" 
} 

Foo, когда его представили (POST)

{"CustomerNumber":2,"CustomerStatus":"1"} 
+3

Покажите нам объект Foo в JS и C#. В их определении, по-видимому, есть несоответствие. – Pradeep

+0

Я нашел ошибку .... URL должен был быть AjaxSaveFoo/вместо AjaxSaveFoo. Это дало мне 301 с сервера (добавление /), но также привело к клиенту, использующему GET и, следовательно, не заполняющему данные. * Sigh * – Middy

ответ

0

Я нашел ошибку ....

URL-адрес должен быть AjaxSaveFoo/вместо AjaxSaveFoo. Это дало мне 301 с сервера (добавление /), но также привело к клиенту с использованием GET и поэтому не заполняло данные. sigh

2

Об ject, который вы проходите, не превращается в объект Foo правильно.

Попробуйте изменить сигнатуру, чтобы ввести строку, а затем попробовать и десериализации:

public JsonNetResult AjaxSaveFoo(string json) 
{ 
    var foo = JsonConvert.DeserializeObject<Foo>(json); 
    return new JsonNetResult 
    { 
     Data = foo 
    }; 
} 
Смежные вопросы