2010-02-16 5 views
4

일부 json 데이터를 직렬화 해제하고 InvalidCastExceptions 등을 가져 오는 데 문제가 있습니다.json 배열을 .net 클래스로 비 직렬화

누구나 올바른 방향으로 나를 가리킬 수 있습니까?

다음은 내가 비동기 해제하려는 json입니다.

[{ "ORDERID": 0, "이름": "요약", "MAXLEN": "200"}, { "ORDERID": 1, "이름": "세부 사항", "MAXLEN" "0"}]

내 코드는 다음과 같습니다.

Public Class jsTextArea 
    Public OrderId As Integer 
    Public Name As String 
    Public MaxLen As String 
    End Class 

Dim js As New System.Web.Script.Serialization.JavaScriptSerializer 
Dim rawdata = js.DeserializeObject(textAreaJson) 
Dim lstTextAreas As List(Of jsTextArea) = CType(rawdata, List(Of jsTextArea)) 

답변

5

ORDERID은 JSON의 int (값 둥근 따옴표 FO 부족주의),하지만 당신은 "jsTextArea"의 문자열로 선언하고 있습니다. 또한, rawdata가 반환 된 형식에 List (Of jsTextArea)에 대한 캐스트가 없으면 표시된 코드가 작동하지 않습니다.

업데이트 밖으로 데이터 시도 (jsTextArea의) 목록에 들어가 다음

Dim js As New System.Web.Script.Serialization.JavaScriptSerializer 
    Dim lstTextAreas = js.Deserialize(Of List(Of jsTextArea))(textAreaJson) 
+1

@GordonB, 난 그냥 추가 한 업데이트를 참조하십시오. 이 코드는 나를 위해 작동합니다 :) 그것은 또한 json과 클래스 사이의 문자열로 int의 변환을 처리하는 것 같습니다 :) – Rob

+0

아, 그래 .... 그냥 직선 deserialize 메서드를 사용하여 일을 발견 ... 분할하려고 Wa 그것을 여러 줄로하여 오류가 발생했음을 알았지 만 도움이 안되었습니다. 몇 초 후에 나를 때리는 것처럼 대답을 드릴 것입니다 ..... 건배. – GordonB

2

한 줄에 모든 치료를 일을 수행;

Dim lstTextAreas As List(Of jsTextArea) = js.Deserialize(textAreaJson, GetType(List(Of jsTextArea))) 
+1

주로 C#에서 작업하므로 (변수를 암시 적으로 입력하기 위해 var를 사용), 내 버전의 행은 "보다 깨끗하게 보입니다"하지만 동일한 IL로 컴파일되어 똑같은 일을하게됩니다! :) – Rob

+0

Yah, 두 경로 ... 동일한 결과, 내 말은 적다. 건배 당신의 도움을 :) – GordonB

0
Dim textAreaJson As String = "[{""OrderId"":0,""Name"":""Summary"",""MaxLen"":""200""},{""OrderId"":1,""Name"":""Details"",""MaxLen"":""0""}]" 
Dim js As New System.Web.Script.Serialization.JavaScriptSerializer 
Dim lstTextAreas As jsTextArea() = js.Deserialize(Of jsTextArea())(textAreaJson) 
0

여기에 모든 종류의 JSON을 역 직렬화하는 기능입니다 :

Public Function DeserializeJson(Of T)(json As String) As T 
     Return New JavaScriptSerializer().Deserialize(Of T)(json) 
    End Function 
관련 문제