Avatar billede mnc Nybegynder
20. april 2011 - 14:31 Der er 12 kommentarer og
1 løsning

xml serializing giver en xml fil uden objektet

Mjah, jeg sidder og prøver at få noget gem-til-xml til at virke, og synes ikke at kunne komme udenom nedenstående problem.


if (dc != null)
{
  TextWriter txtWriter = new StreamWriter(Path.Combine(Application.StartupPath, Environment.MachineName + ".xml"));
  XmlSerializer serializer = new XmlSerializer(typeof(DataContainer));
  serializer.Serialize(txtWriter, dc);
  txtWriter.Close();
}

Giver følgende XML fil:

<?xml version="1.0" encoding="utf-8"?>
<DataContainer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />

Og uanset hvordan og hvorledes jeg ellers forsøger mig med manuelt at lave XML indholdet bagefter, så nægter:

if (dc != null)
{
  TextReader txtReader = new StreamReader(Path.Combine(Application.StartupPath, Environment.MachineName + ".xml"));
  txtReader.Read();
  XmlSerializer deSerializer = new XmlSerializer(typeof(DataContainer));
  dc = (DataContainer)deSerializer.Deserialize(txtReader);
txtReader.Close();
}

også at virke - den siger konsekvent at der er en fejl først i XML filen:
"Dataene på rodniveau er ugyldige. Linje 1, position 1."


Jeg har sidder og googlet siden før middag, og nu giver jeg op.
Hvad er det jeg ikke kan se? :(
Avatar billede mnc Nybegynder
20. april 2011 - 14:36 #1
Skulle måske lige sige at "save" og "load" koden ligger hver for sig, og køres ikke samtidigt.
Avatar billede arne_v Ekspert
20. april 2011 - 14:52 #2
Hvis DataContainer har en XmlRoot attribut og har properties med baade get og set for de data som skal gemmes, saa boer det virke!
Avatar billede mnc Nybegynder
20. april 2011 - 14:57 #3
Har haft XmlRootAttribute af og på et par gange i løbet af dagen, prøver lige at smide den på igen.
Og har ikke haft brug for Set endnu, men prøver lige at smide dem på.
Avatar billede mnc Nybegynder
20. april 2011 - 15:03 #4
XML'en ser nu væsenligt pænere ud:

<?xml version="1.0" encoding="utf-8"?>
<DataContainer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ComputerName>BB00613</ComputerName>
  <MacAddress>00247E6B8371</MacAddress>
  <TimeStamp>2011-04-20T14:58:42.910543+02:00</TimeStamp>
</DataContainer>

Men jeg får fortsat følgende Inner

"Dataene på rodniveau er ugyldige. Linje 1, position 1."



TextReader txtReader = new StreamReader(Path.Combine(Application.StartupPath, Environment.MachineName + ".xml"));
txtReader.Read();
XmlSerializer deSerializer = new XmlSerializer(typeof(DataContainer));
dc = (DataContainer)deSerializer.Deserialize(txtReader);
txtReader.Close();


- og jeg har sikret mig at de 2 path's er identiske.
Avatar billede mnc Nybegynder
20. april 2011 - 15:05 #5
Du mener XmlRoot attribute, i stil med dette?

[XmlRoot("DataContainer")]
public class DataContainer
{

og ikke [XmlRootAttribute(...)]
Avatar billede arne_v Ekspert
20. april 2011 - 15:09 #6
XmlSerializer bruget get og set, saa de skal vaere der.

[Foobar] og [FoobarAttribute] har saa vidt jeg husker samme betydning.
Avatar billede arne_v Ekspert
20. april 2011 - 15:10 #7
Har du checket indholdet af filen bl.a. om der er BOM?
Avatar billede mnc Nybegynder
20. april 2011 - 15:21 #8
Det ved jeg ikke lige hvordan jeg ser i notepad - havde ikke hørt om et BOM før.

Har prøvet at lege med
TextReader txtReader = new StreamReader("path", false);

til denne overload
public StreamReader(
    string path,
    bool detectEncodingFromByteOrderMarks
)


Og så har jeg forsøgt mig med

FileStream fs = new FileStream(Path.Combine(Application.StartupPath, Environment.MachineName + ".xml"), FileMode.Create);
TextWriter txtWriter = new StreamWriter(fs, Encoding.UTF8);

at tilføje encoding på writeren.

Alt uden held. :P


Hvordan kan jeg se om der er BOM i xml'en? :)
Avatar billede mnc Nybegynder
20. april 2011 - 15:25 #9
Hvad angår indholdet kan jeg henvise til http://www.eksperten.dk/spm/937165#reply_7768587 , der ser du hvad jeg ser. :) Med notepad.
Avatar billede mnc Nybegynder
20. april 2011 - 15:34 #10
Har fri nu, så kigger ikke forbi igen før tirsdag.

Jeg bumper på tirsdag hvis jeg stadig sidder fast da. :)
Avatar billede arne_v Ekspert
21. april 2011 - 02:33 #11
Slet den her linie:

txtReader.Read();

:-)
Avatar billede arne_v Ekspert
21. april 2011 - 02:33 #12
og et svar
Avatar billede mnc Nybegynder
26. april 2011 - 08:25 #13
Så læser den XML'en tilbage til programmet.

Tak for hjælpen. :)
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