2010-12-10 8 views
2

Wir sind dabei, Data Access Layers auf eine neuere, stärker unterstützte und generiertere DAL zu migrieren als die derzeit verwendete.C# Typkonvertierung zwischen nicht verwandten Objekten

Als solche haben wir viele verschiedene Objekte, die zwar technisch unterschiedlich sind, Sammlungen von Daten darstellen, die ohne Datenverlust einfach ineinander übergeführt/konvertiert werden können.

Was ist die flexibelste oder am weitesten verbreitete oder am meisten bevorzugte Methode, um diese Art von Typumwandlung durchzuführen?

ich erwäge, eine Reihe von Teilklassen zu schreiben, die IConvertible implementieren. Ich habe auch überlegt, einen System.ComponentModel.TypeConverter zu erstellen, um die Konvertierungen durchzuführen. Gibt es noch andere Möglichkeiten, die ich möglicherweise nicht berücksichtigt habe?

Welche Optionen sind verfügbar?

Idealerweise möchte ich diese Conversions in einer Erweiterungsklasse oder einer anderen Bibliothek behalten, um unsere Projektreferenzen nicht unnötig zu belasten. Das Durcheinander kann in dieser speziellen Umwandlungsbibliothek leben.

Zum Beispiel

in DAL1.DataTypes Ich habe eine Klasse Table1Data

in DAL2.DataTypes Ich habe eine Klasse Table1

Dank.

Antwort

3

Sie können einen automatisierten Mapper verwenden - siehe automapper:

AutoMapper verwendet einen fließend Konfigurations-API eine Objekt-Objekt-Mapping-Strategie zu definieren. AutoMapper verwendet einen konventionsbasierten Abgleichsalgorithmus, um Quellen- und Zielwerte aufeinander abzustimmen.

1

BLToolkit unterstützt recht performant aufwandsarmen Objekt-Mapping: http://bltoolkit.net/Doc.ObjectToObject.ashx

public class SourceObject 
{ 
    public bool Value1 = true; 
    public string Value2 = "10"; 
    public string StrValue = "test"; 
} 

public class DestObject 
{ 
    [MapField("Value1")] public bool BoolValue; 
    [MapField("Value2")] public int IntValue; 

    // If source and destination field or property names are equal, 
    // there is no need to use MapField attribute. 
    // 
    public string StrValue; 
} 

public void Test() 
{ 
    SourceObject source = new SourceObject(); 
    DestObject dest = Map.ObjectToObject<DestObject>(source); 
} 

Upd: mit dem jüngsten SO aktualisiert es ein echter Schmerz ist jeder Code Formatierungsprobleme zu verwenden Code-Schnipsel in IE6, sorry, wenn es.

Verwandte Themen