[C# / XML] Serializen van een array

Pagina: 1
Acties:

Onderwerpen


  • pvtonger
  • Registratie: Juni 2003
  • Laatst online: 21:43
Ik moet een XML file naar een 3rd party component sturen. Die component verwacht iets in de vorm van:

XML:
1
2
3
4
5
6
7
8
9
10
11
12
<SampleSet>
    <Name>Blah</Name>
    <Created>Blah</Created>
    <Sample>
        <Name>Blah</Name>
        <Created>Blah</Created>
    </Sample>
    <Sample>
        <Name>Blah</Name>
        <Created>Blah</Created>
    </Sample>
</SampleSet>


Als alleen een array van Sample's wel onderdeel en Name en Created geen onderdeel van SampleSet zouden zijn, was het vrij eenvoudig. Maar nu krijg ik de volgende output:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<SampleSet>
    <Name>Blah</Name>
    <Created>Blah</Created>
    <Samples>
      <Sample>
        <Name>Blah</Name>
        <Created>Blah</Created>
      </Sample>
      <Sample>
        <Name>Blah</Name>
        <Created>Blah</Created>
      </Sample>
    </Samples>
</SampleSet>


<Samples /> wil ik dus niet hebben.

De C# code ziet als volgt uit:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  public class SampleSet
  {
    [XmlElement("Name")]
    public string Name { get; set; }

    [XmlElement("Created")]
    public string Created { get; set; }

    [XmlArrayItem("Sample", typeof(Sample))]
    public Sample[] Samples { get; set; }
  }
  
  public class Sample
  {
    [XmlElement("Name")]
    public string Name { get; set; }

    [XmlElement("Created")]
    public string Created { get; set; }
  }


Hoe kan ik voorkomen dat de tag <Samples> wordt toegevoegd?

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Volgens mij gewoon zo
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  public class SampleSet
  {
    [XmlElement("Name")]
    public string Name { get; set; }

    [XmlElement("Created")]
    public string Created { get; set; }

    [XmlElement("Sample")]
    public Sample[] Samples { get; set; }
  }
  
  public class Sample
  {
    [XmlElement("Name")]
    public string Name { get; set; }

    [XmlElement("Created")]
    public string Created { get; set; }
  }

[disclaimer]
Niet getest
[/]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:56
Volgens mij zo:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[XmlRoot ("SampleSet")]
public class SampleSet
{
     [XmlElement ("Name")]
     public string Name { get; set; }
   
     [XmlElement ("Created")]
     public string Created { get; set; }

     [XmlArray ("Samples")]
     [XmlArrayItem ("Sample")]
     public Sample[] Samples { get; set; }
}

[XmlRoot("Sample")]
public class Sample 
{ 
    [XmlElement("Name")] 
    public string Name { get; set; } 

    [XmlElement("Created")] 
    public string Created { get; set; } 
}

[ Voor 22% gewijzigd door whoami op 27-08-2009 12:10 ]

https://fgheysels.github.io/


  • pvtonger
  • Registratie: Juni 2003
  • Laatst online: 21:43
@Woy: je bent geweldig. d:)b

@whoami: Bedankt voor het meedenken! Helaas werkt de suggestie niet.

[ Voor 58% gewijzigd door pvtonger op 27-08-2009 12:15 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:56
Ik krijg deze output:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0"?>
<SampleSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name>Set</Name>
  <Created>CreationDate</Created>
  <Samples>
    <Sample>
      <Name>Sample1</Name>
      <Created>date1</Created>
    </Sample>
    <Sample>
      <Name>Sample2</Name>
      <Created>date2</Created>
    </Sample>
  </Samples>
</SampleSet>

Maar nu zie ik dat jij het net iets anders wilt. :P
Dan moet je 't inderdaad doen met de code van Woy.

https://fgheysels.github.io/