Laden...

XmlObjectMapper - XML Data Binding Framework

Erstellt von BusinessPunk vor 10 Jahren Letzter Beitrag vor 10 Jahren 3.973 Views
B
BusinessPunk Themenstarter:in
4 Beiträge seit 2013
vor 10 Jahren
XmlObjectMapper - XML Data Binding Framework

Hallo zusammen,

ich habe auf Codeplex ein relativ neues Projekt erstellt, dass vielleicht auch den einen oder anderen von euch hier Interessieren könnte.

Grundfunktion des Projektes ist Daten aus XML automatisch in business objects zu packen (C# Klassen) und diese natürlich zurück zu schreiben. Natürlich soll das ganze auch so einfach wie möglich sein deshalb verwende ich z.b. als "XML Data Binding" Property Attributes:


[XomBinding("book", false, false, 0, typeof(Book))]
public IList<IBook> Books
{
   get { return _books; }
   set
   {
       _books = value;
       RaisePropertyChanged("Books");
    }
}

Natürlich ist das nicht das einzige Feature. Wie Ihr in dem sample schon sehen könnte werden IList, Enums, Interfaces und natürlich alle Datentypen wie int, double, bool, string, uint, und int? unterstützt. Auch können die Add, Insert, Delete von IList benutzt werden um neue XML Daten zu erzeugen.


//GetSampleBookXmlFile() can return XmlDocument, XDocument, String or a File Path
//magic happens here ;)
ICatalog catalog = XmlObjectMapper.Parse(GetSampleBookXmlFile(), typeof(Catalog)) as ICatalog;

//make your changes
catalog.Books[0].Genre = BookGenre.Horror;
catalog.Books[1].Id = "bk102XXX";
catalog.Books[2].Price = 10.99;

//or add/delete/create objects
IBook newBook = new Book();
newBook.Id = "bk123";
newBook.Price = 9.99;
newBook.Title = "Book 123";
catalog.Books.Add(newBook);

//save and done!
XmlObjectMapper.Save();
//or use XmlDocument.Save or XDocument.Save()

Als wenn ich euch neugierig gemacht habe dann schaut euch das doch mal an und gebt mir ein feedback 😃

2.298 Beiträge seit 2010
vor 10 Jahren

Für mich sieht das ein wenig aus, als hättest du die Xml-Serialisierung nachgebaut, die das .NET Framework eigentlich von Haus aus Unterstützt.

Ich habs mir jetzt nicht im Detail angesehen, aber welche Grundsätzlichen Vorteile bringt dein Framework?

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

B
BusinessPunk Themenstarter:in
4 Beiträge seit 2013
vor 10 Jahren

Ja die XML-Serialisierung habe ich auch früher benutzt aber die ist leider nicht sehr flexibel und hat leider einige meiner Wünsche nicht unterstützt (siehe unten). Zusätzlich hatte ich auch einige bugs in der Serializierung z.b. speichern des xml als utf8 ohne bom etc.
*Interfaces benutzen *IList verwenden und nicht unbedingt array *unbekannte xml elemente behalten bzw. nur das änder was wirklich notwendig ist *verwendung von XMLDocument oder XDocument oder string als Source *so wenig boiler code wie nötig *runtime serilisierung

und vielleicht einige mehr die mir gerade nicht einfallen...

2.298 Beiträge seit 2010
vor 10 Jahren

Ich werd mir das nach Feierabend mal genauer ansehen. - Jetzt wo ich so drüber nachdenke könnte es durchaus brauchbar sein.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

709 Beiträge seit 2008
vor 10 Jahren

Hallo BusinessPunk,
gibt es auch die Möglichkeit den Mapper als Serializer zu verwenden?

Gruß
pinki

B
BusinessPunk Themenstarter:in
4 Beiträge seit 2013
vor 10 Jahren

Hi pinki,

das ist möglich allerdings habe ich das erzeugen von neuen XML Strukturen immer nur bei bestehenden Dokumenten verwendet bzw. es dahingehend entwickelt. Das heißt bei add(), insert() oder new object werden das xml natürlich erzeugt und entsprechend in das Dokument eingehängt aber ob das auch funktionieren kann wenn überhaupt noch kein Dokument vorhanden ist 🤔

Vielleicht kannst du mir ja mal deinen Use-Case genauer beschreiben dann kann ich das noch mit einbauen 😉

Im übrigen arbeite ich für die nächste Version an einen Model Generator mit T4. Das heißt ich gebe eine XSD in den Generator und bekomme eine fertige Klassen/Interface Struktur mit den entsprechenden Bindings zu XOM. Im Prinzip der nachbau der xsd.exe für dieses Framework.

B
BusinessPunk Themenstarter:in
4 Beiträge seit 2013
vor 10 Jahren

Kurzer zwischen Stand:

der XSD Code Generator ist mittlerweile stabil und funktioniert erstaunlich gut 😁

Er verwandelt eure XSD-Schema's in die benötigten Klassen/Interface Strukturen (mit Attribute Mapping) für das XOM-Framework. Ein Beispiel könnte ihr hier sehen XomXSD.exe Info

Den dazugehörigen Code/T4/UnitTests und die XomXSD.exe findet Ihr auf der Codeplex Seite unter "Source Code", eine neuer Alpha Release wird es die Tage aber auch noch geben.

Gruß BusinessPunk