Avatar billede dl Nybegynder
22. februar 2008 - 12:56 Der er 9 kommentarer og
1 løsning

XDocument, og XDeclaration fejl.

Jeg skal forsøg at lave et xml dokument med linq.
Altså jeg skal benytte linq, da det ikke fylder så meget i koden og dermed giver bedre overkuelighed.

jeg har derfor laves en webservice som jeg skal bruge, og lagt denne metode ind:

        [WebMethod]
        public XDocument HelloWorld1()
        {
            XDocument xDoc = new XDocument();
            xDoc.Add(new XElement("item", "value"));

            return xDoc;
        }



jeg prøver at compilie, og denne fejl kommer:

System.Xml.Linq.XDeclaration kan ikke serialiseres, fordi den ikke har en konstruktør uden parametre.
Beskrivelse: Der opstod en undtagelse, der ikke blev behandlet, under udførelse af den aktuelle webanmodning. Se staksporingen for at få yderligere oplysninger om fejlen, og hvor den kom fra i koden.

Detaljer om undtagelse: System.InvalidOperationException: System.Xml.Linq.XDeclaration kan ikke serialiseres, fordi den ikke har en konstruktør uden parametre.

Kildefejl:

Der blev oprettet en undtagelse, der ikke blev behandlet,  under kørsel af den aktuelle webanmodning. Du kan finde oplysninger om undtagelsens oprindelse og placering ved hjælp af nedenstående staksporing af undtagelser.





Jeg forstår det ikke ... jeg har ikke lavet noget kode, som har med denne fejl at gøre.

hvordan kommer jeg vidre og får løst denne fejl.
Avatar billede arne_v Ekspert
22. februar 2008 - 13:11 #1
Dit XDocument indeholder jo nok en XDeclaration og derfor får du problemet.

Lad din web service returnere en string i.s.f..
Avatar billede dl Nybegynder
22. februar 2008 - 13:20 #2
ja, den tanke fik jeg også og da jeg havde lavet dette indlæg, og prøve med dette stk kode. Samme fejl.

        [WebMethod]
        public XDocument HelloWorld1()
        {
            System.Xml.Linq.XDeclaration del = new XDeclaration("1.0","utf-8","yes");
            XDocument xDoc = new XDocument();
            xDoc.Declaration = del;
            xDoc.Add(new XElement("item", "value"));

 
            retun xDoc;
}
Avatar billede arne_v Ekspert
22. februar 2008 - 13:36 #3
Det ændrer ikke på noget at du gør din XDeclaration eksplicit.

Gem dit XDocument som en string og returner den fra din web service.
Avatar billede dl Nybegynder
22. februar 2008 - 13:48 #4
[WebMethod]
        public String HelloWorld1()
        {


           
            XDocument xDoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
       
     
            xDoc.Add(new XElement("item", "value"));

 
            return xDoc.ToString();
        }


Sådan her:  så har jeg dette output:  <string><item>value</item></string>


Der må da være en måde, hvor jeg kan returner en XDocument,  hvad skulle pointet ellers være ved at bruge linq, lige udover at koden bliver mere overskuelig.
Avatar billede dl Nybegynder
22. februar 2008 - 14:40 #5
Og det hele virker.

Hvis jeg tager mine XElementer  og  loader dem ind i en XmlDokument.

forstår da ikke, hvorfor det ikke virker den anden vej rundt.
Avatar billede arne_v Ekspert
22. februar 2008 - 15:02 #6
Du skal ligesom gøre dig klart at LINQ til XML er for at query i XML mens web service
er for at kommunikere mellem forskellige komponenter.

Det giver mening at:

fil-->XDocument->LINQ->string------------------(web service)-------------->string->vis

fil->string------------------(web service)--------------->string->XDocument->LINQ->vis

men du skal holde din .NET specifikke kode på enten server side eller client side.
Avatar billede dl Nybegynder
22. februar 2008 - 15:09 #7
Men hvis jeg kan lave et XmlDokument og sende det via min webservice, som virker fint.

Hvorfor kan jeg så ikke tage XDokument og sende igemmen på samme måde som XmlDokument.

Og jeg mener, server specifikke kode er det jo ikke, de er begge den rene form for XML ?
Avatar billede arne_v Ekspert
22. februar 2008 - 15:17 #8
Både XmlDocument og XDocument er .NET specifikke klasser.

En string med XML er portabel.

Det er muligt at det går godt med at sende et XmlDocument fordi den tilfældigvis er seriazable,
men der er ikke meget pointe. Et Java/PHP/Python/whatever program kan ikke bruge
en System.Xml.XmDocument til noget.
Avatar billede dl Nybegynder
22. februar 2008 - 15:29 #9
Arr, se det er jeg med på :)

kom med et svar.
Avatar billede arne_v Ekspert
22. februar 2008 - 15:46 #10
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester