0

XmlSerializer를 사용하여 이미지 속성 "href"를 추출하고 싶습니다.XmlSerializer를 사용하여 배열에서 특성을 추출하는 방법은 무엇입니까?

내 설정은 다음과 같습니다 경우가 작동합니다

<images> 
     <image id="285"> 
      http://images1.com/test.jpg" 
     </image> 

     <image id="286"> 
      http://images1.com/test.jpg" 
     </image>  
</images> 

은 다음과 같습니다하지만하지 : 여기


<images> 
    <image href=http://images1.com/test.jpg" id="285" /> 
    <image href=http://images1.com/test.jpg" id="286" />   
</images> 
내 개체입니다

private string[] imageList; 
    [XmlArrayItem("image", typeof(object))] 
    [XmlArray("images")] 

    public string[] imageLink 
    { 
     get 
     { 
      return imageList; 
     } 
     set 
     { 
      imageList = value; 
     } 

    } 

+1

시리얼 라이저가 아닌 Linq to Xml을 사용 해본 적이 있습니까? – JamieSee

+0

@JamieSee 예, XBOX XDK를 사용하고 있습니다. XBOX에서 Linq를 지원한다고 생각하지 않습니다. – Fabii

+0

@JamieSee, XDocument로도이를 수행 할 수 있음을 알게되었습니다. – Fabii

답변

1

많은 XML을 따르는 serializer를 얻기 위해 여러 가지 방법을 시도했습니다.

당신은 이런 식으로 뭔가를 할 수 있습니다 :

string xml = @"<images> 
    <image href=""http://images1.com/test.jpg"" id=""285"" /> 
    <image href=""http://images1.com/test2.jpg"" id=""286"" />   
</images>"; 

    List<string> images = new List<string>(); 
    using (StringReader sr = new StringReader(xml)) 
    using (XmlTextReader xr = new XmlTextReader(sr)) 
    { 
     while (!xr.EOF) 
     { 
      xr.MoveToContent(); 
      xr.ReadToDescendant("image"); 
      xr.MoveToAttribute("href"); 
      xr.ReadAttributeValue();    
      images.Add(xr.Value); 
      xr.MoveToElement(); 
      if (xr.Name != "images") 
      { 
       xr.ReadElementString(); 
      } 
      else 
      { 
       xr.ReadEndElement(); 
      } 
     } 
    } 

나는 그것을 파고 좀 더 많은 작업을 수행하고 원하는 XML 직렬화를 사용하여 얻을 수있는 방법 내놓았다했습니다

[XmlRoot("images")] 
public class ImageListWrapper 
{ 
    public ImageListWrapper() 
    { 
     Images = new List<Image>(); 
    } 

    [XmlElement("image")] 
    public List<Image> Images 
    { 
     get; set; 
    } 

    public List<string> GetImageLocations() 
    { 
     List<string> imageLocations = new List<string>(); 

     foreach (Image image in Images) 
     { 
      imageLocations.Add(image.Href); 
     } 

     return imageLocations; 
    } 
} 

[XmlRoot("image")] 
public class Image 
{ 
    [XmlAttribute("href")] 
    public string Href { get; set; } 
} 
+0

그래, 내 XML을 리팩터링하거나 제공 한이 멋진 코드를 사용하는 것 같다. 대단히 고맙습니다. 그 사이에 누구든지 XML 직렬 변환기 솔루션을 제공 할 수 있는지 알아볼 것입니다. – Fabii

+0

오늘 아침에 더 많은 작업을했고 정확한 XML로 직렬화 작업을 할 수있는 방법을 찾았습니다. – JamieSee

+0

같은 분류를 내놓았지만 몇 걸음도 놓쳤습니다. 고마워요, 당신은 생명의 은인입니다. – Fabii

관련 문제