2013-10-23 7 views
4

저는 C# 개발자이자 자바 스크립트 인 newbi입니다. 나는 하나의 C# 개체가 마지막으로 index.cshtml에, 나는 전화를 통해 객체로부터 변환 된 문자열을 얻을 수 있습니다 Json.Encode (OBJ)C# 개체를 JSON 또는 자바 스크립트 개체로 변환

문자열은 다음과 같습니다 그러나

[ 
    { 
    "Name":"CASE_A", 
    "Values":[99.8,99.9,99.9,99.8,99.8,96.3,22.3] 
    }, 
    { 
    "Name":"CASE_B", 
    "Values":[99.8,99.8,99.8,96.3,22.3] 
    }, 
] 

, 때 JSON.parse (@TheString)를 호출, 내가 가지고 :

data = JSON.parse([{"Name":"CASE_A","Values":[99.8,99.9,99.9,99.8 .... 
:

Uncaught SyntaxError: Unexpected token & 

이 오류의 위치는 나에게 이것을 보여줍니다

이 문제를 어떻게 해결할 수 있습니까?


답변 해 주셔서 감사합니다. 하지만 여전히 나는 오류가 있어요 :

@{ 
    string tmp = "[{\"Name\":\"CASE_A\",\"Values\":[99.8,99.9,98.6]},{\"Name\":\"CASE_B\",\"Values\":[96.7,11.1]}]"; 
} 
var data1 = JSON.parse(@Html.Raw(@tmp)); 

그리고 소스이 줄을 보여줍니다 : 간단한 테스트를 위해

Uncaught SyntaxError: Unexpected token o 

을, 나는이 사용

var data1 = JSON.parse([{"Name":"CASE_A","Values":[99.8,99.9,98.6]},{"Name":"CASE_B","Values":[96.7,11.1]}]); 

내가 볼 수있는 "O" 이리.


또한 javascript 개체를 만들기 위해 Travis는 직렬화 전에 키 이름을 제거하도록 제안했습니다. 그러나 C#에서는 모든 개체의 멤버 이름이 있어야합니다. 내가 생각할 수있는 것은 문자열 조작입니다. 그렇게 할 수있는 더 좋은 방법이 있습니까?

+0

키 이름없이 javascipt 객체를 가져올 수 있다면 이상적입니다. 예 : [[CASE_A, [[99.8,99.9,99.9,99.8,99.8,96.3,22.3], ...] – Daebarkee

+1

직렬화하기 전에 수행해야합니다. –

+1

다른 오류로 인해이 오류를 실제로 파악할 수 없습니다 : "잡히지 않은 SyntaxError : 예기치 않은 토큰 o". 하지만 json 객체 대신 javascript 객체를 사용하여 "data = eval (@ Html.Raw (TheString))"을 사용했습니다. 성공했습니다. – Daebarkee

답변

13

면도기가 자동으로 탈출 할 HTML 엔티티를 사용하는 것입니다. 당신은 Html.Raw 이것을 해제 할 수 있습니다

JSON.parse(@Html.Raw(TheString)) 
+0

감사합니다 .p.sw. 나는 라훌과 당신 사이에 궁금해하고 있었지만, 더 많은 사람들이 당신의 분명한 대답을 좋아하는 것 같습니다. – Daebarkee

+0

@Daebarkee 감사합니다. 그러나 일반적으로 질문에 가장 완벽하게 답변하거나 가장 일반적으로 문제가되는 것은 아닌 것으로 판단되는 답변을 수락해야합니다. [대답이 "받아 들여질 때"는 무엇을 의미합니까?] (http://stackoverflow.com/help/accepted-answer) –

1

문자열을 사용하면 Razor가 주사로부터 사용자를 보호합니다. 당신이 json 기회를 통과한다면 그것은 문제가되지 않습니다. 일반적인 방법은 도움이 될 시도에 Html.Raw 도우미에게 당신을 위해

data = JSON.parse(@(Html.Raw(TheString))); 
3

당신은 HtmlHelper.Raw method 사용하여이 시도 할 수 있습니다 : -

data = JSON.parse(@Html.Raw(TheString)); 

는 또한 두 번째 오류, JSON 들어 DataContractJsonSerializer Class

Serializes objects to the JavaScript Object Notation (JSON) and deserializes JSON data to objects. This class cannot be inherited.

+0

라훌 감사합니다. 하지만 여전히 문제가 있습니다. 업데이트 된 질문을 참조하십시오. – Daebarkee

3

체크 아웃 .parse는 문자열을 기대하지만 ar을 전달 중입니다. 레이.

var data1 = JSON.parse("[{\"Name\":\"CASE_A\",\"Values\":[99.8,99.9,98.6]},{\"Name\":\"CASE_B\",\"Values\":[96.7,11.1]}]"); 

을 나는 또한 서버 측 자바 스크립트 코드에이 객체를 주입되기 때문에,에 JSON.parse를 호출 할 필요가 없다는 것을주의 할 : 귀하의 JS 출력 코드는 일을 같이해야한다 모든. 오랫동안 제대로 형식화 된 자바 스크립트를 클라이언트로 보내면 평가되고 실행되며, 서버에서 어떻게 생성되는지는 중요하지 않습니다.대신 다음을 시도해보십시오.

var data1 = @Html.Raw(@tmp); 
0

OP 솔루션이 저에게 효과적이었습니다.

data = eval(JSON.parse(@Html.Raw(TheString))) 
관련 문제