Avatar billede halden Nybegynder
12. april 2011 - 13:46 Der er 2 kommentarer og
1 løsning

Serialization

Hejsa,
jeg har en udfordring med at serialization.
I mine objekter er der et xml element som hedder det samme (Note) men med forskellig typer - i et object er det af typen Note og i et andet er det af type string.

Når jeg prøver at serialisere objektet opstår følgende fejl:
Det øverste XML-element 'Note' fra navneområdet 'cbc' refererer til to forskellige typer, Test.Note og System.String. Brug XML-attributter til at angive et andet XML-navn eller -navneområde til elementet eller typerne.

Hvordan løser jeg det så de stadig har de samme namespaces som angivet i koden?

Her er test koden:
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;

namespace Test
{
    class Program
    {
        static void Main()
        {
            var invoice = new Invoice();

            var namespaces = new XmlSerializerNamespaces();
            namespaces.Add(NameSpaces.Cac, NameSpaces.Cac);
            namespaces.Add(NameSpaces.Cbc, NameSpaces.Cbc);
            namespaces.Add(NameSpaces.Ext, NameSpaces.Ext);

            var serializer = new XmlSerializer(typeof(Invoice));
            TextWriter textWriter = new StreamWriter("C:\\test.xml");
            serializer.Serialize(textWriter, invoice, namespaces);
            textWriter.Close();
        }
    }

    [XmlRootAttribute("Invoice", IsNullable = false)]
    public class Invoice
    {
        [XmlElement("Note", Namespace = NameSpaces.Cbc)]
        public List<Note> Note { get; set; }

        [XmlElement("InvoiceLine", Namespace = NameSpaces.Cac)]
        public List<InvoiceLine> InvoiceLine { get; set; }

        public Invoice() {}
    }

    public class InvoiceLine
    {
        [XmlElement("Note", Namespace = NameSpaces.Cbc)]
        public string Note { get; set; }

        public InvoiceLine() {}
    }

    public class Note
    {
        [XmlText]
        public string Value { get; set; }

        public Note() {}

        public Note(string note)
        {
            Value = note;
        }
    }

    public struct NameSpaces
    {
        public const string Cac = "cac";
        public const string Cbc = "cbc";
        public const string Ext = "ext";
    }
}
Avatar billede arne_v Ekspert
13. april 2011 - 01:17 #1
Ja?

        [XmlElement("Note", Namespace = NameSpaces.Cbc)]
        public List<Note> Note { get; set; }

og:

        [XmlElement("Note", Namespace = NameSpaces.Cbc)]
        public string Note { get; set; }

ser ikke kompatible ud!
Avatar billede arne_v Ekspert
13. april 2011 - 03:02 #2
[XmlElement("NoteList", Namespace = NameSpaces.Cbc)]
        public List<Note> Note { get; set; }

giver nok mening.
Avatar billede arne_v Ekspert
22. maj 2011 - 21:55 #3
OK?
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
Kurser inden for grundlæggende programmering

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