| 

.NET C# Java Javascript Exception

4
Ich habe folgenden Beispielcode in einer C# Consolenanwendung:
internal class Program
{
private static void Main(string[] args)
{
VehicleCollection vehicleCollection = new VehicleCollection();
vehicleCollection.Vehicles.Add(new Vehicle
{
Id = Guid.NewGuid(),
Name = "vehicle1"
});

vehicleCollection.Vehicles.Add(new Vehicle
{
Id = Guid.NewGuid(),
Name = "vehicle2"
});

XDocument xDoc = vehicleCollection.Vehicles.Serialize();
Console.WriteLine(xDoc.ToString());
Console.ReadLine();
}
}

public class VehicleCollection
{
public VehicleCollection()
{
Vehicles = new List<Vehicle>();
}

[XmlArray(ElementName = "Group")]
[XmlArrayItem(ElementName = "Vehicle", Type = typeof(Vehicle))]
public List<Vehicle> Vehicles { get; set; }
}

[XmlType]
public class Vehicle
{
[XmlAttribute(AttributeName = "id")]
public Guid Id;

[XmlElement]
public string Name;
}

Den Serializer habe ich als ExtensionMethod realisiert. Der spielt hier aber keine Rolle, denn mir geht es nur um die XML-Attribute.
Nach der Serialisierung erhalte ich im XML-Root "ArrayOfVehicle". Hier sollte aber "Group" stehen. Wie müssen dazu die XML-Attribute aussehen?
Lieber wäre mir sogar (falls möglich), wenn meine VehicleCollection direkt von List<Vehicle> erben könnte.
public class VehicleCollection:List<Vehicle>
{
}
News:
03.11.2011
Jürgen Luhr 7,1k 1 9
2 Antworten
1
Eigentlich hast Du die Zutaten doch schon beieinander:

[XmlRoot(ElementName = "Group")]
public class VehicleCollection : List<Vehicle>
{
public VehicleCollection()
{
Vehicles = this;
}

//quick&dirty-Lösung, um den Code am Laufen zu halten
[XmlIgnore]
public List<Vehicle> Vehicles { get; set; }
}


Der XmlSerializer wird dann mit typeof(VehicleCollection) angelegt. Das habe ich zum Testen so gemacht:

var ser = new XmlSerializer(typeof(VehicleCollection));
var sb = new StringBuilder();
var xmlWriter = XmlWriter.Create(sb);
ser.Serialize(xmlWriter, vehicleCollection);
xmlWriter.Close();
Console.WriteLine(sb.ToString());
03.11.2011
Matthias Hlawatsch 13,2k 4 9
Das klappt bei mir leider nicht. Der Name wird nicht geändert. Kann es am Serializer liegen?
Jürgen Luhr 03.11.2011
Würde mich zwar wundern, aber wer weiß. Habe meine Antwort um den Serialisierungscode ergänzt.
Matthias Hlawatsch 03.11.2011
Das kann es sein. Ich habe im Serializer typeof(List<T>) stehen.
Ich werde es nachher testen.
Jürgen Luhr 03.11.2011
Passt. Der Serializer musste noch angepasst werden. Diese Lösung wird genommen. Danke!
Jürgen Luhr 03.11.2011
0
Eine gefühlte Ewigkeit habe ich gesucht und nun eine passable Lösung gefunden, zwar nicht direkt über Attribute, aber dem Serializer kann folgender Parameter mitgegeben werden:
new XmlRootAttribute("TheRootElementName")

Damit wird das RootAttribute überschrieben.
Sollte jemand eine Lösung für XML-Attribute auf Elementebene finden, nehme ich weitere Vorschläge gerne an.
03.11.2011
Jürgen Luhr 7,1k 1 9

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH