2013-09-06 3 views
0

인수가 여러 번 발생 했었지만 저는 초보자이며 오류를 관리하는 방법을 이해하지 못합니다.
저는 Stream XML을 가지고 있으며 데이터 계약 방식으로이를 deserialize하고 싶습니다.
내가 잘못한 부분을 발견 했습니까?C에서 데이터 계약을 사용하는 XML 직렬화 중에 오류가 발생했습니다

:

HttpWebResponse response = (HttpWebResponse)_webRequest.GetResponse(); 
Stream responseStream = response.GetResponseStream(); 
XmlSerializer xs = new XmlSerializer(typeof(LoginResponseContract)); 
LoginResponseContract loginResponseContract = (LoginResponseContract)xs.Deserialize(streamXmlAuthentication); 

이는 예외 : 코드 여기

namespace XmlAnalyzer.Ws { 
    [Serializable()] 
    public class LoginResponseContract { 
     [System.Xml.Serialization.XmlElement("uid")] 
     public string Uid { get; set; } 

     [System.Xml.Serialization.XmlElement("username")] 
     public string Username { get; set; } 

     [System.Xml.Serialization.XmlElement("iddName")] 
     public string Name { get; set; } 

     [System.Xml.Serialization.XmlElement("iddSurname")] 
     public string Surname { get; set; } 
    } 
} 

된다 : 여기

<?xml version="1.0"?> 
<response> 
    <sessid>jsh5ekqnt39117tmu5gjebkku4</sessid> 
    <session_name>Name Session</session_name> 
    <user> 
     <uid>2</uid> 
     <vID>1</vID> 
     <roleId>1</roleId> 
     <username>[email protected]</username> 
     <password>password</password> 
     <dateCreation>2013-05-14 00:00:00</dateCreation> 
     <dateLastLogin>2013-09-06 09:22:10</dateLastLogin> 
     <enabled>1</enabled> 
     <multisession>1</multisession> 
     <iddID>4</iddID> 
     <iddName>Nome</iddName> 
     <iddSurname>Cognome</iddSurname> 
     <iddMobile>32222222</iddMobile> 
     <iddEmail>[email protected]</iddEmail> 
     <iddTelephone></iddTelephone> 
     <iddFax></iddFax> 
     <iddNotice></iddNotice> 
     <roles>manager</roles> 
    </user> 
    <result>1</result> 
</response> 

데이터 계약이다 : 여기

는 XML이고

요청이 중단되었습니다. 예기치 않게 연결이 닫혔습니다.

+0

은 내가 특별히이 직렬화에 익숙하지 않아요하지만 클래스는 XML 객체와 정확히 같은 이름과 같은 계층 구조를하지 말았어야? (예 : 성 : <=> iddSurnam) – BobClaerhout

+0

맞습니다. 문제는 여전히 동일합니다. – axel

+0

질문을 업데이트 된 클래스로 업데이트 할 수 있습니까? – BobClaerhout

답변

1

여기 데이터를 비 직렬화하려고합니다. 나는 이것이 당신을 돕기를 바랍니다.

class Program { 
    static void Main(string[] args) { 
     String xml = "<?xml version=\"1.0\"?>\r\n<response>\r\n<sessid>jsh5ekqnt39117tmu5gjebkku4</sessid>\r\n<session_name>Name Session</session_name>\r\n<user>\r\n<uid>2</uid>\r\n<vID>1</vID>\r\n<roleId>1</roleId>\r\n<username>[email protected]</username>\r\n<password>password</password>\r\n<dateCreation>2013-05-14 00:00:00</dateCreation>\r\n<dateLastLogin>2013-09-06 09:22:10</dateLastLogin>\r\n<enabled>1</enabled>\r\n<multisession>1</multisession>\r\n<iddID>4</iddID>\r\n<iddName>Nome</iddName>\r\n<iddSurname>Cognome</iddSurname>\r\n<iddMobile>32222222</iddMobile>\r\n<iddEmail>[email protected]</iddEmail>\r\n<iddTelephone></iddTelephone>\r\n<iddFax></iddFax>\r\n<iddNotice></iddNotice>\r\n<roles>manager</roles>\r\n</user>\r\n<result>1</result>\r\n</response>"; 
     Stream s = new MemoryStream(Encoding.Default.GetBytes(xml)); 
     XmlSerializer xs = new XmlSerializer(typeof(Response)); 
     Response loginResponseContract = (Response)xs.Deserialize(s); 
     Console.WriteLine(loginResponseContract.User.iddName); 
     Console.ReadKey(); 
    } 
} 

[Serializable, XmlRoot("response")] 
public class Response { 
    [XmlElement("sessid")] 
    public string SessionID { get; set; } 
    [XmlElement("session_name")] 
    public string SessionName { get; set; } 
    [XmlElement("user")] 
    public UserDetail User { get; set; } 
    [XmlElement("response")] 
    public int result { get; set; } 
} 

[Serializable] 
public class UserDetail { 
    [XmlElement("uid")] 
    public int ID { get; set; } 
    [XmlElement("vID")] 
    public int vID { get; set; } 
    [XmlElement("roleId")] 
    public int RoleID { get; set; } 
    [XmlElement("username")] 
    public string Username { get; set; } 
    [XmlElement("password")] 
    public string Password { get; set; } 
    [XmlElement("dateCreation")] 
    public string Creation { get; set; } 
    [XmlElement("dateLastLogin")] 
    public string LastLogin { get; set; } 
    [XmlElement("enabled")] 
    public int Enabled { get; set; } 
    [XmlElement("multisession")] 
    public int Multisession { get; set; } 
    [XmlElement("iddID")] 
    public string iddID { get; set; } 
    [XmlElement("iddName")] 
    public string iddName { get; set; } 
    [XmlElement("iddSurname")] 
    public string iddSurname { get; set; } 
    [XmlElement("iddMobile")] 
    public string iddMobile { get; set; } 
    [XmlElement("iddEmail")] 
    public string iddEmail { get; set; } 
    [XmlElement("iddTelephone")] 
    public string iddTelephone { get; set; } 
    [XmlElement("iddFax")] 
    public string iddFax { get; set; } 
    [XmlElement("iddNotice")] 
    public string iddNotice { get; set; } 
    [XmlElement("roles")] 
    public string Roles { get; set; } 
} 
+0

내 응답이 어떻게 나타나야합니까? 더 많은 태그 ** ** 및 내 UserDetail 데이터 계약에 User 배열이 있어야합니까? 나는이 상황에서 자신을 발견하고, 나는 단 한 명의 사용자 만 있고, 그들 모두는 아닙니다. User와 UserDetail을 만들어야한다고 생각합니다. 맞습니까? – axel

+0

아니면 그냥 ** 작업 **해야 ** 및 ** ** 설정? – axel

+0

응답 태그에 여러 개의 사용자 태그가 있음을 의미합니까? 그것은 조용히 처리하기 어려울 것입니다. 여러 사용자 태그가 포함 된 사용자 태그는 처리가 훨씬 더 간단합니다. – rekire