Sie würden denken, dies ist eine sehr einfache Frage. Aber nach vielen Suchen und Tests habe ich keine schöne Lösung gefunden.Serialize ValueObject als XML
Nach Domain-driven Design erstellte ich stark typisierte Bezeichner-Klassen. Denn das hilft bei der Validierung und nicht versehentlich beim Mischen von Identifikatoren.
Also machte ich eine einfache Basisklasse wie folgt:
public abstract class UIDBase<T>
{
private readonly T _id;
protected UIDBase(T id)
{
_id = id;
}
public T ID
{
get { return _id; }
}
// Plus hash/equals implementation
}
Und einfache Implementierungen wie so:
public class SensorUID : UIDBase<string>
{
public SensorUID(string id) : base(id)
{
}
}
Und dann habe ich es verwenden:
public class SomeObject
{
public SensorUID SensorUID { get; set; }
public FileName FileName { get; set; }
}
Aber jetzt, wenn Ich serialisiere es als XML, ich brauche einen Standardkonstruktor (nervig). Schlimmer noch, die Eigenschaften werden nicht mehr als Attribute serialisiert.
Bevorzugt Ich möchte nur benutzerdefinierten Xml-Serialisierungscode zu meiner UIDBase-Klasse hinzufügen. Hinzufügen von Attributen oder Implementieren einer Schnittstelle, um dem XML-Serializer mitzuteilen, dass diese Klassen als Attribute serialisiert werden sollen. Genau wie string/int/long usw.
Wenn diese Werttypen es tun können, warum nicht mein eigener Werttyp?
sollte die Xml wie folgt aussehen:
<SomeObject SensorUID="X" FileName="Y"/>
vorschlagen man sich [dieser Dokumentation MSDN] (https://msdn.microsoft .com/de-us/library/83y7df3e (v = vs.110) .aspx) – user957902
Ich werde mich darum kümmern. Ich habe auch in den .net-Quellcode eingetaucht, um zu sehen, wie System.string das gleiche abzieht. Ich könnte diese Frage selbst beantworten;) –
Domain-Entitäten sollten dauerhaft ignorant sein. Deine Entitäten sind nicht. Es liegt in der Verantwortung des Repositorys, Ihre Entitäten korrekt in XML (oder dem DTO, der Ihre Domänenentität darstellt) zu erhalten. – jgauffin