Was ist der beste Weg, um einen Klon eines DTO zu erstellen? In Silverlight gibt es keine ICloneable-Schnittstelle oder eine BinaryFormatter-Klasse. Ist Reflexion der einzige Weg?Was ist der beste Weg, um ein Geschäftsobjekt in Silverlight zu klonen?
Antwort
Hier ist der Code, den wir zum Klonen entwickelt haben. Dies funktioniert in Silverlight 2 & 3.
Public Shared Function Clone(Of T)(ByVal source As T) As T
Dim serializer As New DataContractSerializer(GetType(T))
Using ms As New MemoryStream
serializer.WriteObject(ms, source)
ms.Seek(0, SeekOrigin.Begin)
Return DirectCast(serializer.ReadObject(ms), T)
End Using
End Function
Ich glaube, dass die Standard-Klonen-Funktion weggelassen wurde, um es einfach und leicht zu halten. Ich glaube, dass Sie entweder JSON oder XML-Serialisierung verwenden können, um dasselbe zu erreichen. Nicht sicher über die Leistungskosten.
Wie Klon zu erstellen, wenn meine Quelle IEnumerable ist. Dieser LayerDto hat auch einen Objekttyp (zB MetaItemDto).
Code:
public class LayerDto { }
public class MetaItemDtoList: System.Collections.ObjectModel.ObservableCollection { }
public static IEnumerable Clone (IEnumerable Quelle)
{
IEnumerable<LayerDto> layers;
DataContractSerializer serializer = new DataContractSerializer(typeof(IEnumerable<LayerDto>));
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, source);
ms.Seek(0, SeekOrigin.Begin);
//return (IEnumerable<LayerDto>)serializer.ReadObject(ms);
layers = (IEnumerable<LayerDto>)serializer.ReadObject(ms);
return layers;
}
}
Aber was ist das Problem, das ich gegenüberstelle, ist, dass Schicht nicht seine metaItems (für jede Schicht) zeigt.
ICloneable ist nicht verfügbar in Silverlight 4 (ich weiß nicht über 1/2/3 oder kommende Version). Es wird aus den öffentlichen APIs von Silverlight 4 entfernt. Hilfe von Mike Schall Code; es funktioniert für mich.
public LayerDto Clone(LayerDto source)
{
DataContractSerializer serializer = new DataContractSerializer(typeof(LayerDto));
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, source);
ms.Seek(0, SeekOrigin.Begin);
return (LayerDto)serializer.ReadObject(ms);
}
}
- 1. Was ist der beste Weg, um ein Bild in Silverlight zu teilen?
- 2. Was ist der beste Weg, um ein Verzeichnis zu leeren?
- 3. Der beste Weg, Observable zu klonen?
- 4. Was ist der beste Weg, um ein Zählerfeld in MySQL
- 5. Was ist der beste Weg, um in C++ zu casten?
- 6. Klonen Sie ein Steuerelement in silverlight
- 7. Was ist der einfachste Weg, einen Webservice zu klonen?
- 8. Was ist der beste Weg, um ein "Passwort vergessen?" Seite?
- 9. Was ist der beste Weg, um mit OSGI zu beginnen?
- 10. Was ist der beste Weg, um einen "Timer" zu implementieren?
- 11. Was ist der beste Weg, um srand() zu säen?
- 12. Was ist der beste Weg, um mehrere Aktionen zu behandeln?
- 13. Was ist der beste Weg, um eine Tabelle zu deduplizieren?
- 14. Was ist der beste Weg, um eine Animation zu fahren?
- 15. Was ist der beste Weg, um eine Enumeration zu erhöhen?
- 16. Was ist der beste Weg, um einen ByteArrayOutputStream zu schließen?
- 17. Was ist der beste Weg, um Code zu organisieren?
- 18. Was ist der beste Weg, um eine Eigenschaft zu deklarieren?
- 19. Was ist der beste Weg, um einen InputStream zu überwachen?
- 20. Was ist der beste Weg, um jQuery zu lernen?
- 21. Was ist der beste Weg, um vorberechnete Daten zu implementieren?
- 22. Was ist der beste Weg zu
- 23. Was ist der beste Weg, um ähnliche Strings zu bearbeiten?
- 24. Was ist der beste Weg, um eine IllegalArgumentException zu fangen
- 25. Was ist der beste Weg, um innere Produkte zu bilden?
- 26. Was ist der beste Weg, um eine Sitemap zu erstellen?
- 27. Was ist der beste Weg, um mehrere Suchoptionen zu behandeln?
- 28. Android, Was ist der beste Weg, um AbstractThreadedSyncAdapter zu töten?
- 29. Was ist der beste Weg, um einen Datenrahmen zu umgehen?
- 30. bash - Was ist der beste Weg, um Ergebnisse zu zählen?
Möchten Sie diese Klonfunktionalität auf der Server- oder Silverlight-Seite verwenden? Oder beide Seiten? –