Serialisieren Sie Geschachtelte Klassen in c#?
Was ich versuche zu tun, ist das serialisieren von Verschachtelten Klassen. Mein Erster code:
[Serializable]
public class SampleClass
{
[Serializable]
public class Person
{
[XmlElement("Name")]
public string Name { get; set; }
[XmlElement("Age")]
public ushort Age { get; set; }
}
[Serializable]
public class Adress
{
[XmlElement("Street")]
public string Street { get; set; }
[XmlElement("House number")]
public int Number { get; set; }
}
public SampleClass()
{
}
public SampleClass(string _name, byte _age, string _street, int _number)
{
Person p = new Person();
p.Name = _name;
p.Age = _age;
Adress a = new Adress();
a.Street = _street;
a.Number = _number;
}
}
Möchte ich, um xml, wie dies
<?xml version="1.0"?>
<SampleClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<Person>
<Name></Name>
<Age></Age>
</Person>
<Adress>
<Street></Street>
<HouseNumber></HouseNumber>
</Adress>
</SampleClass>
Wenn ich dies serialisieren SimleClass:
using (Stream str = new FileStream(@"C:/test.xml", FileMode.Create))
{
XmlSerializer serial = new XmlSerializer(typeof(SampleClass));
SampleClass sClass = new SampleClass("John",15,"Street",34);
serial.Serialize(str, sClass);
label1.ForeColor = Color.Black;
label1.Text = "Ok";
}
Es ist mir test.xml Datei, sondern innerhalb der Datei ist :
<?xml version="1.0"?>
<SampleClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
Was mache ich falsch?
Dank im Voraus:)
InformationsquelleAutor harry180 | 2012-03-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie wirklich wollen zu serialisieren ist dies :
Aber diese Variablen sind lokal.
Erstellen Sie eine Eigenschaft, die jeder ein und schmücken Sie mit dem serializable-Attribut zu. Jetzt wird es funktionieren.
BTW: Adresse dauert 2 d.
this.Person
noch null sein, da es noch nicht instanziiert wurde.Oops, übersehen, danke 🙂
InformationsquelleAutor Arnaud F.
Wenn Sie serialisieren wird eine Instanz der main-Klasse, die Serialisierung serialisieren wird eine Instanz der geschachtelten Klasse, wenn, und nur wenn das graph-Objekt enthält. In dieser Hinsicht, geschachtelte Klassen sind genau die gleichen wie alle anderen Klassen.
Im Grunde haben Sie zum erstellen von Eigenschaften für die geschachtelte Klasse in der Haupt
Dann, @harry180, sollte dies nicht der akzeptierten Antworten?
InformationsquelleAutor Massimiliano Peluso
Diese Zeile ist ungültig:
Als element-name kann nicht ein Raum in ihm.
Arnaud F hat die richtige Antwort - Sie sind nicht eigentlich die Zuordnung der Person und Adresse, die Sie erstellen, um die Klasse überall (obwohl zu der Zeit zu schreiben, er ist immer noch nicht ganz richtig kapiert, siehe mein Kommentar zu seiner Antwort).
InformationsquelleAutor cjk
Der Grund, warum Sie immer eine leere XML-Datei ist, dass Ihr
SampleClass
hat keine Eigenschaften, zu serialisieren.Im Konstruktor erstellen Sie eine
Person
undAddress
die weggeworfen werden, sobald die Methode existiert, da Sie nicht mit Ihnen für alles. Ändern Sie Ihren code wie folgt und sollten Sie mehr Erfolg haben.InformationsquelleAutor Trevor Pilley