2017-01-03 5 views
1

내가 역 직렬화하려고 데이터는 .. 용기 내부에,이 게시물 만 이상의 개체에>역 직렬화 JSON 컨테이너 배열

Deserialize JSON Facebook feed using Gson,이 JSON 같은 exacly하고 내가 "GSON"

사용하지 않는

내가 개체 중 일부는 심지어 자신의 용기 어딘가에 중첩 있다고 생각하지만, 그 존재의 문제가되지 않습니다, 주요 문제는 내가 ..

public class Rootobject 
{ 
    public int found { get; set; } 
    public Post[] posts { get; set; } 
    public Meta meta { get; set; } 
} 

I를 다음 클래스에 직렬화 복원하는 데 문제가 있다는 것입니다 API의 json이 배열, 일종의 배열, Json.net 문서에, 그들은 그것을 데이터 세트라고합니다. 나는 Json.Net을 사용하고 있습니다.

가장 최근의 비 직렬화 시도는;

List<Rootobject> data = JsonConvert.DeserializeObject<List<Rootobject>>(stringData); 

그래도 데이터가 null이고 얻을 수 있습니다.

추가 정보 : 유형 'System.Collections.Generic.List`1 [WebApplication17.Models로 :

현재 JSON 객체 (예 : { "값", "이름"}) 역 직렬화 할 수 없습니다. Root object] ' 형식에 JSON 배열 (예 : [1,2,3])이 필요하므로 을 올바르게 직렬화 할 수 없습니다.

아마도 LINQ to JSON은 아직 확실하지 않은 방법입니다. 제안 사항은 무엇입니까?

답변

1

첫 번째 것은 게시물의 JSON이 유효한 JSON 문자열이 아니므로 해당 항목을 남길 수 없다는 것입니다. 둘째로 나는 그것을 올바른 JSON을 만들기 위해 JSON을 수습하고 해결하기 위해 노력하고

{ 
    "data": [ 
     { 
      "id": "105458566194298_411506355589516", 
      "message": "...", 
      "type": "status", 
      "created_time": "2012-11-25T17:26:41+0000", 
      "updated_time": "2012-11-25T17:26:41+0000", 
      "comments": { 
       "count": 0 
      } 
     }, 
     { 
      "id": "105458566194298_411506355589516", 
      "message": "...", 
      "type": "status", 
      "created_time": "2012-11-25T17:26:41+0000", 
      "updated_time": "2012-11-25T17:26:41+0000", 
      "comments": { 
       "count": 0 
      } 
     } 
    ] 
} 

는 그래서 클래스 구조가이

public class Comments 
{ 
    public int count { get; set; } 
} 
public class Datum 
{ 
    public string id { get; set; } 
    public string message { get; set; } 
    public string type { get; set; } 
    public DateTime created_time { get; set; } 
    public DateTime updated_time { get; set; } 
    public Comments comments { get; set; } 
} 
public class MyData 
{ 
    public List<Datum> data { get; set; } 
} 

같은 것 다음과 같이 일반적으로 Desearlize처럼 따라서 귀하의 JSON 보인다 당신은하고 있었어요

MyData data = JsonConvert.DeserializeObject<MyData>(stringData); 
+0

당신이 안티 패턴 Json을 수정하여 무엇을했는지. 내 코드가 이처럼 더 비슷합니다. 차이점은 "발견되었습니다". { 는 "발견": 12, "게시물"[ {}, {} ] } 공용 클래스 Rootobject { 공공 INT 발견 {얻을; 세트; } public Post [] posts {get; 세트; } 공개 목록 데이터 {get; 세트; } public 메타 메타 {get; 세트; } } 루트 객체 데이터 = JsonConvert.DeserializeObject (stringData); Wordpress 공용 API에서와 마찬가지로 Json을 변경할 수 없습니다 ... 어떤 경우에도 귀하의 의견을 듣고 정말 좋은 동료를 한 것으로 확신합니다. –