none
serialização RRS feed

  • Pergunta

  • viva, estou a desenvolver uma aplicaçao em c#, projecto console application usando sockets para comunicar entre cliente servidor, estou a usar xmlSerialization,como nunca tinha usado xmlSerialization, fiz varias pesquisas na net e fiz o seguinte:

    cliente:

            public class MyXmlExample
            {
                public int a;
                public string s;


                public MyXmlExample()
                {
                    a = 0;
                    s = "";
                  
                }
            }
            //Enviar  XML
            MyXmlExample ex = new MyXmlExample();                           
            ex.a=1;
            ex.s = "ola";
            XmlSerializer mySerializer = new XmlSerializer(typeof(MyXmlExample));
            NetworkStream stream = new NetworkStream(sockCliente);
            mySerializer.Serialize(stream, ex);                      
            stream.Close();
           

    servidor:
            if ((ClienteSock = sockServ.Accept()) != null)
             {
            //Receber  XML  
             MyXmlExample exS = new MyXmlExample();
             XmlSerializer mySerializer = new XmlSerializer(typeof(MyXmlExample));
             NetworkStream stream = new NetworkStream(ClienteSock);
             exS = (MyXmlExample)mySerializer.Deserialize(stream);
             Console.WriteLine("recebido {0} {1}", exS.a.ToString(), exS.s.ToString());
             }

            quando corro as aplicaçoes(start without debugging), quando chega a esta linha de codigo :
            exS = (MyXmlExample)mySerializer.Deserialize(stream); dá-me o seguinte erro no servidor :
           na ex.message ->there is an error in xml document (5,3),
           na ex.InnerException.Message->Unable to read data from the transport connection: Uma ligação existente foi forçada a fechar pelo anfitrião remoto
          
           se correr em modo debug tanto na ex.message como na ex.InnerException.Message dá o mesmo erro :
           Unable to read data from the transport connection: Uma ligação existente foi forçada a fechar pelo anfitrião remoto
    será que alguem me pode ajudar?
    terça-feira, 16 de outubro de 2007 12:47

Todas as Respostas

  • Você tem que indicar quais são as Tag's xml para que o parser do XmlSerialization possa serializar.

     

    No seu caso poderia ser assim:

    [XmlRoot("MyXmlExample")]

    public class MyXmlExample
            {

     [XmlElement("ValorA")]

                public int a;

     

     [XmlElement("ValorS")]

                public string s;


                public MyXmlExample()
                {
                    a = 0;
                    s = "";
                  
                }
            }

    ...

     

    Seu arquivo ficaria ssim:

    <MyXmlExample>

    <ValorA>0</ValorA>

    <ValorS>""</ValorS>

    </MyXmlExample>

     

    Ou se quiser troque para xmlAttribute que fica assim:

     

    <MyXmlExample ValorA="0" ValorS=""/>

     

    Assim você vai conseguir, se tiver algum erro de sitaxe desculpe é poruq ey uso VB. Espero que possa ter ajuda também penei para fazer isto.

     

    Att.

    igor

    sexta-feira, 25 de janeiro de 2008 22:10