2012-05-15 5 views
0

많은 요소와 하나의 속성을 포함하는 서버에서 XML 파일을 수신합니다.XML 직렬화 및 직렬화

xml을 시도하고 직렬화/비 직렬화 할 때 모든 요소는 특성을 제외하고 올바르게 직렬화/역 직렬화됩니다. 왜 이런 일이 생길까요?

"<msg><msisdn>123456789</msisdn><sessionid>535232573</sessionid><phase>2</phase><request type=\"1\">*120*111#</request></msg>" 

및 클래스 : typerequest의 속성이기 때문에

+0

유형은 요소 : 요청의 요소이며 요소 : msg가 아닙니다. – Polity

+0

오, 그래, 네가하는 말을 보았다. 감사합니다. –

+0

끝 부분에이 표시되지 않았습니다. –

답변

2

요청에 대한 하위 클래스를 정의하려고 어떤 도움

[Serializable] 
[XmlRoot(ElementName = "msg", Namespace = "")] 
public class myClass 
{ 
    [XmlElement(ElementName = "msisdn")] 
    public string number = string.Empty; 
    [XmlElement(ElementName = "sessionid")] 
    public string sessionID = string.Empty; 
    [XmlAttribute(AttributeName = "type")] 
    public string requestType = string.Empty; 
    [XmlElement(ElementName = "request")] 
    public string request = string.Empty; 
    [XmlElement(ElementName = "phase")] 
    public string phase = string.Empty; 

    public override string ToString() 
    { 
     return number + " - " + sessionID; 
    } 
} 

덕분에 여기

은 XML 파일입니다 뿌리가 아님 MyClass :

[XmlRoot(ElementName = "msg", Namespace = "")] 
public class MyClass 
{ 
    [XmlElement(ElementName = "msisdn")] 
    public string Number { get; set; } 

    [XmlElement(ElementName = "sessionid")] 
    public string SessionID { get; set; } 

    [XmlElement(ElementName = "request")] 
    public Request Request { get; set; } 

    [XmlElement(ElementName = "phase")] 
    public string Phase { get; set; } 

    public override string ToString() 
    { 
     return Number + " - " + SessionID; 
    } 
} 

public class Request 
{ 
    [XmlAttribute(AttributeName = "type")] 
    public string Type { get; set; } 

    [XmlText] 
    public string Value { get; set; } 
} 

class Program 
{ 
    static void Main() 
    { 
     var serializer = new XmlSerializer(typeof(MyClass)); 
     using (var stringReader = new StringReader("<msg><msisdn>123456789</msisdn><sessionid>535232573</sessionid><phase>2</phase><request type=\"1\">*120*111#</request></msg>")) 
     using (var xmlReader = XmlReader.Create(stringReader)) 
     { 
      var obj = (MyClass)serializer.Deserialize(xmlReader); 
      Console.WriteLine(obj.Request.Type); 
     } 
    } 
}