2012-12-04 3 views
0

외부 소스에서 가져온 XML 문서가 있으므로 구조를 변경할 수 없습니다. 전 C# 객체로 직렬화해야합니다 - 조언을 할 수C# XML 구조

<vehicles> 
    <Car> 
     <Vauxhall> 
      <Driver> 
      <Name>John</Name> 
      </Driver> 
    </Car> 
    <Car> 
     <Ford> 
     <Driver> 
      <Name>Jack</Name> 
     </Driver> 
     </Ford> 
    </Car> 
</vehicles> 

사람은 C#을 직렬화 클래스는 위의 간단한 XML 문서에 대한 어떨까? 설정

+2

귀하의 XML 구조를 변경할 수없는 경우에 당신이 그것을 할 수있는 방법을 다른 참조가 유효 XML – Fox32

+2

정확히 무엇을 결정하는 것은 매우 어려운 당신이이 질문에 문법을 정리할 수있는 모든 기회가없는 당신의 문제는 여기에 ... – Charleh

+0

그 문제에 대한 C#도 마찬가지입니다. – tomfanning

답변

0
Public Class Wheels 
{ 
    <XmlAttribute()> 
    public string CarMake; 
    //If you want to have a value in your "Wheels" 
    <XmlText()> 
    public string Value; 
} 

CarMake은 복스 홀하고 당신은 가야 :

<Vehicle> 
    <Car CarMake="Vauxhall"\> 
<Vehicle> 

당신이 당신의 WheelsValue을 설정하면 예를 Astra 당신은 얻을 것이다 :

<Vehicles> 
    <Car CarMake="Vauxhall">Astra<Car/> 
<Vehicles> 

편집을

이 같은이있을 것이다 당신이 전체 구조를 원하는보고 후

:

public class Test 
{ 
    <XmlArray("Vehicles")> 
    <XmlArrayItem("Car")> 
    public List<Wheel> Wheels = new List<Wheel>(); 
} 
+0

정보 루크 주셔서 감사합니다. 위의 편집 코드를 사용하여 ford 드라이버에 액세스 할 수있는 방법은 다음과 같습니다. - 'Console.Write (Vehicles.Car.Vauxhall.Driver.Name); ' – MiscellaneousUser

+0

불행히도, 아니요 이것이 초기 사양으로 응답 되었기 때문에 지금까지 변경되지 않았습니다. – LukeHennerley

0

당신은 일반적인 자동차 클래스를 만든 다음 각각의 특정 메이크업을위한 클래스를 impliment 할 수 있어야한다 - 짜증,하지만 난 돈 ' t 당신이 XML을

public class Car 
{ 
    private Driver _driver; 

    public Driver Driver 
    { 
     get 
     { 
      return _driver; 
     } 
     set 
     { 
      _driver = value; 
     } 
    } 
} 

public class Driver 
{ 
    private string _name; 

    public string Name 
    { 
     get 
     { 
      return _name; 
     } 
     set 
     { 
      _name = value; 
     } 
    } 
} 

public class Vauxhall : Car 
{ 
} 

public class Ford : Car 
{ 
}