2012-11-22 3 views
2

C#으로 일부 json을 비 직렬화하는 데 문제가 있습니다.System.Runtime.Serialization.Json을 사용하여 JSON을 비 직렬화

이것이 내가 전송되고있어 JSON의 조각 (반복 여러 번 있지만, ID/이름이 아닌 다른 아무것도)입니다 가정 :

[ 
    { 
    "id":0, 
    "name":"N/A" 
    }, 
    { 
     "id":1,    
     "name":"Annie"    
    }, 
    { 
     "id":2,    
     "name":"Olaf"    
    }  
] 

최상위 레벨이 지명되었다, 내가 할 거라고 더이 곳

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(ChampList)); 
object objResponse = jsonSerializer.ReadObject(response.GetResponseStream()); 
ChampList jsonResults = objResponse as ChampList; 

그러나 경우 : 다음

[DataContract] 
public class ChampList 
{ 
    [DataMember(Name = "SOMENAME")] 
    public ElophantChamp[] ElophantChamps { get; set; } 
} 

[DataContract] 
public class ElophantChamp 
{ 
    [DataMember(Name = "id")] 
    public int ID { get; set; } 

    [DataMember(Name = "name")] 
    public string Name { get; set; } 

} 

와 같은이를 호출하여 직렬화하지 최상위 컨테이너 객체이고 빈 datamember 이름을 가질 수 없습니다. 어떻게해야합니까? DataMember를 익명으로 남겨두면 (즉, 그냥 [DataMember]로 남겨두면) null 값을 얻습니다. 올바르게 파싱하지 못했음을 나타 내기 위해 취할 것입니다.

오류는 발생하지 않으며 응답 스트림에는 예상 한대로 입력됩니다.

내가 주변에서 검색하고 기본적인 추론을 할 수있는 것을 통해, 나는 내가 있어야 할 필요가있는 곳으로부터 멀리 떨어져 있으면 안된다. 그 최고 수준을 다루는 것에 내가 잘못하고있는 것이 있습니다.

답변

3

상위 클래스 ChampList 없이도 작동합니까?

DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(ElophantChamp[])); 
object objResponse = jsonSerializer.ReadObject(response.GetResponseStream()); 
ElophantChamp[] jsonResults = objResponse as ElophantChamp[]; 
+0

예, 완벽합니다. 나는 그것을 시도했지만, (typeof (ElophantChamp [])로 그것을 할 수 있고 typeof (ElophantChamp)를 시도했음을 깨닫지 못했다 (실패했다). – Craton

관련 문제