2012-10-09 1 views
1

를 역 직렬화 I 다음 JQuery와이 - 다음 객체에MVC JavaScriptSerializer는 JSON

var js = new JavaScriptSerializer(); 
var myobj = js.Deserialize<JsonModel>(items); 

- - 다음 역 직렬화 코드와

var items = new Array(); 
    items.push({ 
    "Item1":$("myvalue").val(), 
    "Item2":$("myvalue2").val() 
}); 

    .... 

    data: { 
      'items': JSON.stringify(items) 
      }, 
    .... 

여기

public class JsonModel 
{ 
    public string Item1 { get; set; } 
    public string Item2 { get; set; } 
} 

를 JSON 문자열입니다 내 컨트롤러에 반환됩니다.

[{\"Item1\":\"1|2|3|5\",\"Item2\":\"1\"}] 

이것은 작동하지 않습니다. 이 코드를 실행하면 빈 객체가 생깁니다. 그러나 json 문자열을 바꾸고 [및]을 제거하면 올바른 데이터로 deserialize됩니다.

이 처리 잘못 오전 - json 문자열을 수정할 필요없이 내 개체에 deserialize하고 싶습니다.

어떤 생각이라도 좋을 것입니다. 감사.

답변

3

JSON.stringify(items)items이 배열이기 때문에 배열로 직렬화하려고합니다. 당신이 아마 원하는 것은 이동하는 것입니다 :

var jsonModel = { 
    "Item1":$("myvalue").val(),  
    "Item2":$("myvalue2").val()  
}; 

.... 

{ 
    'items': JSON.stringify(jsonModel) 
} 

정말 여기했던 모두는 items 배열을 사용하지.

사실 이러한 컨트롤러의 배열을 컨트롤러로 다시 보내려는 경우에만주의해야합니다. 그런 경우 귀하의 직렬화 코드는

js.Deserialize<IEnumerable<JsonModel>>(items); 

같은 것을보고 당연히 당신은 당신이 전에하던대로 되돌려 직렬화 된 배열을 보내야합니다 필요합니다.

+0

감사합니다. 나는 그것을 간과하고있는 간단한 것이되어야한다는 것을 알고있었습니다. – czuroski