2014-07-01 1 views
1

제 3 자로부터 일부 데이터 서버 측을 deserialize해야합니다 (선택의 폭이 아니라 접근성 측면에서 서버 측에서 수행됩니다).잘못된 JSON 프리미티브 :. C#의 JSON에서 역 직렬화하려고 시도

{ 
    "name": "TPO", 
    "columns": [ 
    "ogc_fid", 
    "orderref", 
    "status", 
    "entityref", 
    "treetype", 
    "comments", 
    "orderyear", 
    "label", 
    "dist" 
], 
"data": [ 
    [ 
     360, 
     "07/1970/WR ", 
     "Tree  ", 
     "T6 ", 
     "Chestnut", 
     "Position checked against Scanned Order 13/11/2008", 
     1970, 
     "479055.705,204698.514", 
     33 
    ], 
    [ 
     361, 
     "07/1970/WR ", 
     "Tree  ", 
     "T7 ", 
     "May", 
     "Position checked against Scanned Order 13/11/2008", 
     1970, 
     "479061.747,204685.09", 
     35 
    ] 
] 
} 

내가 객체 TPOData로 직렬화하기 위해 노력하고있어 :

var data = new JavaScriptSerializer().Deserialize<TPOData>(responseFromServer); 

responseFromServer은 다음과 같다 : 그러나, 나는 내가 다음 코드 줄을 호출하고

얻을

public class TPOData 
{ 
    public string name; 
    public List<string> columns; 
    public List<List<object>> data; 
} 

속성 데이터가 달라 지도록 시도했습니다. 위의 외에도 나는 List<object>, List<object[]>, object[][], object[], object을 시도했습니다. 나는 심지어 List<List<string>>을 시도했는데 int 값을 변환하기를 기대했다. 아무도 도움이되지 못했습니다. 문제는 int 배열과 문자열 값이 혼합 된 객체 배열의 두 번째 수준에있는 데이터와 관련이 있다고 생각합니다. 2 단계가 전적으로 문자열이기 때문에 문제없이 List<List<string>>을 사용할 수있는 비슷한 작업을 수행했습니다.

도움을 주시면 감사하겠습니다.

+0

이 문제가 JsonScriptSerializer 클래스에서 오는 것으로 보인다. JSON 변환은 어떤 문제없이 Newtonsoft.Json.JsonConvert를 사용할 때 클래스의 객체를 deserializng합니다. –

답변

0

나는 예제를 시도했고, TPOData 클래스 내에서 JavaScriptSerializer으로 List<List<object>>을 사용하여 나를 위해 잘 작동했다. 내가 사용한 테스트 프로그램은 아래에 복사되어 있습니다. 참고 .NET Framework v4.5가 중요한 경우에 사용하고 있습니다. 문제를 일으킬 수있는 JSON 또는 코드에 표시되지 않은 다른 것이 있습니까?

class Program 
{ 
    static void Main(string[] args) 
    { 
     string json = @" 
     { 
      ""name"": ""TPO"", 
      ""columns"": [ 
       ""ogc_fid"", 
       ""orderref"", 
       ""status"", 
       ""entityref"", 
       ""treetype"", 
       ""comments"", 
       ""orderyear"", 
       ""label"", 
       ""dist"" 
      ], 
      ""data"": [ 
       [ 
        360, 
        ""07/1970/WR "", 
        ""Tree  "", 
        ""T6 "", 
        ""Chestnut"", 
        ""Position checked against Scanned Order 13/11/2008"", 
        1970, 
        ""479055.705,204698.514"", 
        33 
       ], 
       [ 
        361, 
        ""07/1970/WR "", 
        ""Tree  "", 
        ""T7 "", 
        ""May"", 
        ""Position checked against Scanned Order 13/11/2008"", 
        1970, 
        ""479061.747,204685.09"", 
        35 
       ] 
      ] 
     }"; 

     var data = new JavaScriptSerializer().Deserialize<TPOData>(json); 

     Console.WriteLine("name: " + data.name); 
     Console.WriteLine(); 
     foreach (var row in data.data) 
     { 
      for (int i = 0; i < data.columns.Count; i++) 
      { 
       Console.WriteLine(data.columns[i] + ": " + row[i]); 
      } 
      Console.WriteLine(); 
     } 
    } 

    public class TPOData 
    { 
     public string name; 
     public List<string> columns; 
     public List<List<object>> data; 
    } 
} 

출력 :

name: TPO 

ogc_fid: 360 
orderref: 07/1970/WR 
status: Tree 
entityref: T6 
treetype: Chestnut 
comments: Position checked against Scanned Order 13/11/2008 
orderyear: 1970 
label: 479055.705,204698.514 
dist: 33 

ogc_fid: 361 
orderref: 07/1970/WR 
status: Tree 
entityref: T7 
treetype: May 
comments: Position checked against Scanned Order 13/11/2008 
orderyear: 1970 
label: 479061.747,204685.09 
dist: 35 
관련 문제