2009-05-12 7 views
3

난 내 행동 방식의 문자열로 다음과 같은 데이터가 있습니다ASP.NET MVC에 JsonResult을 반환하는 방법

string json = "[[1,2],[3,4],[5,6]]"; 

단순합니다.

Json 뷰를 호출하면 두 개의 큰 따옴표로 결과가 캡슐화됩니다. 이것은 클라이언트 측 자바 스크립트가이 결과를 자바 스크립트 객체로로드하는 것을 중지시킵니다.

eg. 
return Json(json); 

result => "[[1,2],[3,4],[5,6]]" 

하지만, 나는 ContentResult로 결과를 반환하는 경우, 결과는 자바 스크립트 객체로로드되는 나는 내가 함께 할 필요가 무엇이든 할 수 있습니다.

eg. 
return new ContentResult 
{ 
    Content = json, 
    ContentType = "application/json", 
    ContentEncoding =System.Text.Encoding.UTF8 
}; 

result => [[1,2],[3,4],[5,6]]  
      (notice how the double quotes are missing?). 

그래서, 누군가가 내가 바로 제발 일을해야 무엇인지 설명 할 수 있습니까? ContentResult가 올바른 방법이 아닌 것 같습니다.

답변

6

나는 JsonResult이 전달한 객체를 직렬화하려고한다고 가정합니다. 그리고 문자열이 "직렬화"되었기 때문에 (Json 용어로) 모든 객체가 문자열이라는 것을 알 수 있습니다. 'Json land'에서는 문자열 리터럴이 따옴표를 사용합니다.

문자열을 강력한 형식의 List/Collection/Array (문자열에있는 것과 같은 데이터를 나타내는)로 변경하면 올바르게 직렬화됩니다.

1

난 당신이 아마 서버 측 솔루션을 원하는 실현 -하지만 단지의 경우 하나는 다음 자바 스크립트 클라이언트 측에 반환 된 문자열 평가할 수 있습니다 찾을 수 없습니다 :

var jsonResult = eval(resultWithQuotes); 

주의를 당신은해야 안전한 소스에서 결과를 얻는 경우 악성 스크립트가로드 될 수 있으므로이 작업을 수행하십시오.

+1

이 답변은 거의 5 년 전 웹 개발에서 오랜 세월을 보냈으며'eval' 사용의 위험성이 강조되었으므로 이제는 JSON.parse를 사용하는 것이 더 나은 방법이라고 생각합니다. 예 'var jsonResult = JSON.parse (resultWithQuotes);'(브라우저 지원은 [http://caniuse.com/json](http://caniuse.com/json) 참조). –

+0

@IanOxley는 5 년이 되었습니까? 피 묻은 지옥 ... 어쨌든 +1 동의 –

관련 문제