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
특성이 있어야합니다
너무 직렬화되지 않는 형식처럼 보입니다. XML을 쉽게 사전 처리하여 '- '태그를 삽입 할 수 있습니다. –
@HenkHolterman xml을 문자열로 읽는 것과 같은 의미입니다.'- 에는''을 대체 하시겠습니까? –
Cryothic
문자열이 있다고 가정하고, XElement를 통해 돌연변이를 선호합니다. 태그를 대체하는 대신 삽입 할 수도 있습니다. –