2012-10-10 16 views
29

jestem konwersji obiektu do JSON przy użyciu JavaScriptSerializer i widzę to wyjście JSON w kodzie serwera:Konwersja obiektu do JSON w MVC 4

[{"UserId":1,"UserName":"Admin"}] 

Ale w interfejsie robi się przekształcić w coś jak poniżej

[{"UserId":1,"UserName":"Admin"}]. 

Jak uciec od tych "?

Odpowiedz

21

Dlaczego to robisz? Dlaczego nie po prostu zwrócić JsonResult?

public ActionResult MyMethod() 
{ 
    List<ListItem> list = new List<ListItem>() { 
     new ListItem() { UserId = "1", UserName = "Admin" }, 
     new ListItem() { UserId = "2", UserName = "JohnDoe" }, 
     new ListItem() { UserId = "3", UserName = "JaneDoe" }}; 

    return this.Json(list); 
} 
+2

Jeśli chodzi o twoją ostatnią zmianę, dlaczego lepiej jest określić 'ActionResult' jako typ zwracany zamiast' JsonResult'? –

+3

@YannickBlondeau - JsonResult * IS * ActionResult. Wolę, aby typ zwrotu był najbardziej ogólny, który jest akceptowalny w celu zmniejszenia sprzężenia. Na przykład, jeśli zdecydujesz się zmienić typ zwracania na XML, możesz to zrobić bez konieczności zmiany również typu zwracanego. Tylko moja osobista polityka. –

+0

Ok dzięki. Brzmi jak dobry nawyk. –

64

Jeśli używasz widoku silnika Razor trzeba użyć metody Html.Raw:

<script type="text/javascript"> 
    var model = @Html.Raw(Json.Encode(Model)); 
</script> 

zauważy Wykorzystanie metody Json.Encode która jest krótsza i równoważne new JavaScriptSerializer().Serialize().

+1

+ nieskończoność za wyjaśnienie, że oba oświadczenia są takie same. –

0

Jeszcze jedno na odpowiedź Darina Dymitrowa. W moim VS2012 występuje błąd kompilacji ze średnikiem, ponieważ instrukcja od strony JS jest w rzeczywistości "var model =;". Droga wokół stosując parę notowania owinąć część Razor tak:

var model = "@Html.Raw(Json.Encode(Model))"; 

ta nie spowoduje żadnego błędu.

Json.Encode() wydaje się być funkcją wrappera JavaScriptSerializer. Nie jestem pewien, czy ten drugi jest bardziej efektywny czasowo.

Powiązane problemy