2013-07-31 2 views
1

ImgUr.com API를 사용하는 프로젝트에서 작업 중입니다. 이미지 또는 앨범을 요청하고 XML이 반환됩니다.개체에 대한 동적 XmlRootElement

나는 XML을 역 직렬화하기 위해 직렬화기를 사용하고 있습니다. 그래서 저는 이미지와 앨범을위한 수업을했습니다.

<data success="1" result="200"> 
    <id>x</id> 
    ... 
    <images> 
    <item> 
     <id>x</id> 
     <link>http://linktoimage.jpg</link> 
     ... 
    </item> 
    <item> 
     <id>x</id> 
     <link>http://linktoimage.jpg</link> 
     ... 
    </item> 
    ... 
    </images> 
</data> 

그래서 실제 이미지의 루트 요소는 '상품'이다

그러나 여기가 까다로운 부분 온다 ... 앨범입니다은 다음과 같이 보인다.

<data success="1" result="200"> 
    <id>x</id> 
    <link>http://linktoimage.jpg</link> 
    ... 
</data> 

지금, 루트 요소는 '데이터'입니다 : 내가 API를 통해 실제 이미지를 요청할 때

는하지만, 나는 다음과 같은 얻을.

이제 해결책은 두 가지 다른 클래스입니다. 하나는 [XMLRootElement(Elementname = "item")]이고 하나는 [XMLRootElement(Elementname = "data")]인데 이것에 대한 간단한 해결책이 있어야 할 것 같습니까?

편집 : 헹크의 요청에 의해 , 내 수신 부분 나는 XML 잡에 대한이 코드 : 그래서

var request = WebRequest.Create(String.Format("{0}image/{1}.xml",  Settings.Default.ImgUrBaseUrl, albumId)); 
request.Headers.Add("Authorization", "Client-ID " + Settings.Default.ImgUrClientID); 

var response = request.GetResponse(); 
var imageStream = response.GetResponseStream(); 
if (imageStream == null) return ""; 
var serilizer = new XmlSerializer(typeof(ImgUrSingleImage)); 
var result = serilizer.Deserialize(imageStream) as ImgUrSingleImage; 

, 나는 내가 <data> 태그 및 랩을 취할 필요 같아요 새 <item> 태그의 나머지 XML?

var imageStream = response.GetResponseStream(); 
if (imageStream == null) return ""; 

XElement doc = XElement.Load(imageStream);    
XElement item = new XElement("item", doc.Elements()); 
doc.ReplaceNodes(item); 
var reader = new StringReader(doc.ToString()); 

var serilizer = new XmlSerializer(typeof(ImgUrSingleImage)); 
var result = serilizer.Deserialize(reader) as ImgUrSingleImage; 

을 다음 ImgUrSingleImage 클래스는 목록 요청에 공통으로 단일 Item 특성이 있어야합니다

+1

너무 직렬화되지 않는 형식처럼 보입니다. XML을 쉽게 사전 처리하여 ''태그를 삽입 할 수 있습니다. –

+0

@HenkHolterman xml을 문자열로 읽는 것과 같은 의미입니다.'에는''을 대체 하시겠습니까? – Cryothic

+1

문자열이 있다고 가정하고, XElement를 통해 돌연변이를 선호합니다. 태그를 대체하는 대신 삽입 할 수도 있습니다. –

답변

1

이 같은 <image> 태그를 삽입 할 수 있습니다.

또는 <data> 태그를 건너 뛰고 item XElement에서 직접 deserialize 할 수 있습니다.

+0

니스, 내가 이것을 시도합니다. 고맙습니다 – Cryothic