Avatar billede rmjdk Nybegynder
01. september 2009 - 15:10 Der er 6 kommentarer og
1 løsning

arv og xml serialisering

Hejsa

Jeg vil kunne læse et NetworkCredential fra en xml fil og tænkte jeg ville bruge Xml serialisering. Jeg har en klasse, Credential, der arver fra NetworkCredential og hvor jeg har specificeret attributterne som XmlAttributes (bemærk 'new')

    [XmlRoot]
    public class Credentials : NetworkCredential
    {
        private string _domain;
        private string _username;
        private string _password;

        [XmlAttribute]
        public new string Domain
        {
            get { return _domain; }
            set { _domain = value; }
        }

        [XmlAttribute]
        public new string UserName
        {
            get { return _username; }
            set { _username = value; }
        }

        [XmlAttribute]
        public new string Password
        {
            get { return _password; }
            set { _password = value; }
        }
    }

men ved deserialisering får jeg følgende:
{"Member 'Credentials.Domain' hides inherited member 'NetworkCredential.Domain', but has different custom attributes."}

What to do??

På forhånd tak!
Avatar billede arne_v Ekspert
01. september 2009 - 15:22 #1
Jeg vil tro at du skal vaelge en af:
- undlade at arve fra NetworkCredential men evt. implementere ICredentials
- droppe dine 3 fields og lade dine properties override NetworkCredential's og kalde dens properties

Det er noget rod at du har 2 domain, 2 username og 2 password i dine objekter.
Avatar billede rmjdk Nybegynder
01. september 2009 - 15:33 #2
hej arne

Jeg vil helst fortsætte med NetworkCredential da jeg ik hvordan jeg implementere GetNetworkCredential(Uri uri, string authType) i ICredentials.

Hvis jeg prøver at override med
        [XmlAttribute]
        public override string Domain;
        {
            get { return _domain; }
            set { _domain = value; }
        }

får jeg at vide at der er "no suitalbe field for override".
Avatar billede rmjdk Nybegynder
01. september 2009 - 15:35 #3
Credentials.Domain.get': cannot override inherited member 'System.Net.NetworkCredential.Domain.get' because it is not marked virtual, abstract, or override

for at være helt præcis
Avatar billede bvli Praktikant
01. september 2009 - 15:56 #4
Det er fordi Domain ikke er virtual. Så nej - du kan ikke override den. Jeg synes også det er noget rod at arve fra NetworkCredential. Implementer i stedet ICredentials eller find en anden måde at serialisere NetworkCredentials på.

Lav evt. to utility-metoder som serialiserer og deserialiserer manuelt vha. en XmlWriter eller et XmlDocument. Det er trods alt ikke alverden af properties der skal serialiseres.
Avatar billede arne_v Ekspert
01. september 2009 - 17:52 #5
Hvis klassen ikke er lavet til at blive extended, saa er der jo nok en mening med det.

ICredentials lyder som den rigtige vej.
Avatar billede rmjdk Nybegynder
02. september 2009 - 09:40 #6
Ok, jeg bruger ICredentials istedet. Smid et svar arne.

Jeg har nogle xml serialiserings spørgsmål som jeg laver i en ny tråd.
Avatar billede arne_v Ekspert
03. september 2009 - 02:12 #7
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