Serialisierung der Klasse abgeleitet von List<> mit DataContract

Ich versuche zu serialisieren, die eine abgeleitete Klasse von List<> mit DataContract. Das problem ist, dass die Eigenschaften meiner Klasse nicht serialisiert.

Meine Klassen:

[CollectionDataContract] /*[Serializable]*/ /*[DataContract]*/
public class DownloadRuleCollection : List<DownloadRule> {

    [DataMember(EmitDefaultValue = false)]
    public string SomeProperty { get; set; }
    //this is, in fact, more complex, but this is enough for the example
}

[DataContract]
public class DownloadRule {
    [DataMember(EmitDefaultValue = false)]
    public string Name { get; set; }

    /*
     more properties
     ...
     */
}

Test:

static void Main(string[] args) {

    //fill test collection with some data...
    var col = new DownloadRuleCollection { SomeProperty = "someText" };

    var rule = new DownloadRule { Name = "test01" };
    col.Add(rule);

    rule = new DownloadRule { Name = "test02" };
    col.Add(rule);

    rule = new DownloadRule { Name = "test03" };
    col.Add(rule);

    //serialize
    Console.WriteLine("serializing");

    Serialize(col, "serializationTest.xml");

    Console.WriteLine("serialized");
    Console.ReadLine();
}

Ergebnis:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfDownloadRule xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/ConsoleApplication1">
  <DownloadRule>
    <Name>test01</Name>
  </DownloadRule>
  <DownloadRule>
    <Name>test02</Name>
  </DownloadRule>
  <DownloadRule>
    <Name>test03</Name>
  </DownloadRule>
</ArrayOfDownloadRule>

Wie Sie sehen können, die Liste der Elemente serialisiert werden (und Deserialisierung) richtig, aber die Liste selbst nicht serialisiert. Ich habe versucht, die unterschiedliche Attribute verwenden:
[Serializable], keine änderung;
[DataContract], wirft Ausnahme, die während der Serialisierung (Sammlungen cant verwenden Sie dieses Attribut)

btw ich bin mit der Serialisierung auch private Felder, so kann ich nicht verwenden XmlSerializer (oder andere Klassen, die nicht serialisiert werden private Felder).

InformationsquelleAutor Markos | 2010-08-07

Schreibe einen Kommentar