Automapper zu erstellen-Objekt von XML
Wenn ich die folgende Klasse:
class SPUser
{
public int ID { get; set; }
public string Name { get; set; }
public string LoginName { get; set; }
public string Email { get; set; }
public bool IsSiteAdmin { get; set; }
public bool IsSiteAuditor { get; set; }
public bool IsDomainGroup { get; set; }
public List<SPGroup> Groups { get; set; }
}
Und ich bin mit dem sharepoint web services, die XML mit Attributen für jede Eigenschaft in meiner Klasse, wie zum Beispiel:
<Users>
<User Name="name" Description="desc" ..... />
</Users>
Gibt es eine Möglichkeit zu AutoMapper verwenden Sie zum zuordnen der XML-fragment eine SPUser
Instanz der Klasse?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blog wurde gelöscht - hier ist die Bing-Archiv den Beitrag von @DannyDouglass
Vereinfachen, Verwenden Sie Xml-Daten Mit AutoMapper und Linq-to-Xml -
Ich habe vor kurzem lief in einem Szenario, bei der Arbeit, die erforderlich manuell konsumieren mehrere SOAP-web-services, die ich bin sicher, Sie können sich vorstellen, war eher eintönig. Ein co-worker (Seth Carney) und ich habe versucht ein paar verschiedene Ansätze, aber schliesslich einigten wir uns auf eine Lösung, die vereinfacht, der Verbrauch von xml-und machten schließlich den code besser getestet werden. Die Lösung rund um die Nutzung AutoMapper, eine open-source-Objekt-Objekt-mapping-tool, um eine Verknüpfung zwischen der XElements(http://msdn.microsoft.com/en-us/library/system.xml.linq.xelement.aspx) zurückgegeben, die in der SOAP-Nachrichten und benutzerdefinierte Verträge, die wir geschaffen – in einer wiederverwendbaren Art und Weise.
Ich zusammen eine kurze demo, die zeigt, wie könnte man den gleichen Ansatz verwenden, zu konsumieren, und zeigen Sie die Twitter Public Timeline (http://api.twitter.com/1/statuses/public_timeline.xml) (über die API die Xml-Antwort geben).
Hinweis: Der Quellcode für das folgende Beispiel finden Sie auf meiner GitHub Seite: https://github.com/DannyDouglass/AutoMapperXmlMappingDemo
Nach dem erstellen eines basic MVC3 (download beta) Projekt und die damit verbundenen test-Projekt war der erste Schritt, um die AutoMapper-Paket installiert. Ich habe mit NuGet, Microsoft vor kurzem angekündigt, Paket-management-system, zur Installation einer open-source-Abhängigkeiten. Den folgenden Befehl war alles, was nötig war, um das setup AutoMapper in meine MVC3-Projekt (Lesen Sie mehr über NuGet hier(http://weblogs.asp.net/scottgu/archive/2010/10/06/announcing-nupack-asp-net-mvc-3-beta-and-webmatrix-beta-2.aspx) und hier(http://weblogs.asp.net/scottgu/archive/2010/10/06/announcing-nupack-asp-net-mvc-3-beta-and-webmatrix-beta-2.aspx)):
Mit AutoMapper installiert, ich bin bereit, um loszulegen erstellen die notwendigen Komponenten für die xml-to-object mapping. Der erste Schritt ist das erstellen eines quick-Vertrag in meinem Antrag zu stellen, den Tweet-Objekt:
Nichts verrückt hier – gerade eine einfache Person. Dies sind alle Felder, die in der Reaktion von der Twitter-API mit einem anderen Namen für einige Felder. In einfachen Fällen, in denen die Quell-und Ziel-Objekte den gleichen Namen haben, können Sie setup eine Karte sehr schnell mit dieser syntax:
Jedoch AutoMapper nicht die Unterstützung von Xml standardmäßig habe ich legen Sie die Felder an, dass ich mapping. Mithilfe der Fluent-API in AutoMapper ich bin in der Lage, Kette mein Feld-mappings. Werfen Sie einen Blick auf ein Beispiel-Feld zugeordnet, in meinem Beispiel – tweet Körper:
Es sieht vielleicht zuerst kompliziert, aber all das ist wirklich hier passiert, ist, dass wir es sind, die details zu AutoMapper an, welcher Wert zu verwenden, in meinem source-Objekt und wie die Karte an die Ziel-Objekt-Eigenschaft. Es ist eine Besondere Linie möchte ich den Fokus auf die im obigen Text-Feld-mapping:
Den XElementResolver ist ein benutzerdefinierter Wert resolver ( http://automapper.codeplex.com/wikipage?title=Custom%20Value%20Resolvers ), dass Seth kam mit Griff Parsen der XmlElement-source-Objekt zum abrufen von einer stark typisierten Wert für die Verwendung in der Zuordnung. Ich werde Details, mehr im moment, aber bevor wir weitergehen, nehmen Sie einen Blick auf meine volle Zuordnung:
Diese benutzerdefinierten Wert resolver ist der eigentliche Schlüssel, der erlaubt, dass diese XElement-zu-Vertrag-maps in der ursprünglichen Lösung. Ich habe wiederverwendet dieser resolver in diesem Beispiel, wie wir oben gesehen haben. Das war alles, was notwendig war, um erstellen Sie eine eigene resolver-Klasse:
Diese generische XElementResolver ermöglicht auf einfache Art und Weise übergeben Sie den Typ der Wert abgerufen, in unserem mapping oben. Zum Beispiel die folgende syntax wird verwendet, um stark geben Sie den Wert abgerufen, aus der XmlElement-Objekten in das Id-Feld ist .ForMember() Erklärung oben:
Mit meinem mapping vollständig konfiguriert und instanziert, ich bin bereit zum aufrufen der Twitter-API und nutzen AutoMapper, um anzuzeigen, dass die Letzte Öffentliche Timeline.
Habe ich eine einfache Klasse ist verantwortlich für das abrufen der Twitter-API-Antwort:
Den GetPublicTimeline-Methode ist eine einfache Methode, Rückkehr, Sie Ahnen es, die Twitter Public Timeline, die durch die Nutzung der Karte, die wir zuvor erstellt haben:
In meine MVC3-Website HomeController kann ich machen einen kurzen Anruf, um die retrieval-Methode anfordern die letzten 10 Ergebnisse:
Und schließlich, nach ein wenig Formatierung meiner Ansicht nach mit der neuen Razor view engine von Microsoft, ich habe meinen öffentlichen Zeitleiste angezeigt!
Müssen Sie check out Die XML-Serialisierung in .NET für diese - das ist der Weg zum serialisieren eines Objekts in XML oder Deserialisieren es von der XML.
Automapper kann verwendet werden, um Eigenschaften zwischen zwei Objekten - es handelt sich nicht um XML überhaupt.
Mehr Ressourcen:
Bisschen spät in den Tag, aber jemand hat verwendet AutoMapper die Zuordnung von XML-einem POCO anstatt hinunter die XMLSerialization route. Ich fand den folgenden blog-Eintrag:-
Vereinfachen Sie Mithilfe von Xml-Daten mit AutoMapper und Linq-to-Xml
Dies ist genug, um Ihnen den Einstieg auf die Implementierung eines generischen benutzerdefinierten Konfliktlöser Ihrer eigenen, wenn das Beispiel eines ist nicht genug.
EDIT: link fixed
EDIT: wirklich Feste Verbindung
Sie können Benutzer XML-Deserialisierung für diese Zwecke. In .NETTO haben wir XmlSerializer und DataContractSerializer