0

Einfache XML-Serialisierung in C#

C# XML SerialisierungHeute möchte ich euch zeigen, wie man eine XML-Serialisierung in C# durchführen kann. Serialisierung selbst, bedeutet, dass man ein Objekt in eine andere, transportable Form umwandelt. Mittels XML-Serialisierung ist es uns zum Beispiel nötig, ein Objekt einer Klasse in Form einer XML-Datei abzuspeichern und auch wieder herzustellen.
Das kann Sinn machen, wenn man ein Objekt in seinem Zustand nach dem Schließen und erneuten Öffnen einer Anwendung wiederherstellen oder wenn man ein Objekt beispielsweise per HTTP übertragen möchte.

Für unser Beispiel habe ich folgende Klasse Blog erstellt:

public class Blog
{
    public string User { get; set; }
    public string Pass { get; set; }
    public string Subdomain { get; set; }
    public string BaseUrl { get; set; }
}

Die Methode zum Serialisieren sieht wie folgt aus:

public void SerializeBlogToXML(Blog blogObj)
{
    //Erstelle einen XML-Serialisierer für Objekte vom Typ Blog
    XmlSerializer serializer = new XmlSerializer(typeof(Blog));

    //Erstelle einen FileStream auf die Datei, in die unserer
    //Blog-Objekt in XML-Form gespeichert werden soll.
    FileStream file = new FileStream(Application.StartupPath
                                     + "\\blog.xml",
                                     FileMode.Create);
    //Serialisiere das übergebene Blog-Objekt (blogObj)
    //und schreibe es in den FileStream.
    serializer.Serialize(file, blogObj);

    //Schließe die XML-Datei.
    file.Close();
}

Nicht vergessen die passenden Using-Anweisungen zu schreiben!

using System.Xml.Serialization;
using System.IO;

Ohne diese würde die oben geschriebene Methode SerializeBlogToXML nicht ohne weitere Anpassungen laufen.

Das war es auch schon. Wenn man von meinen Kommentaren absieht, dann reichen ganze 4 Zeilen aus, um ein Objekt als XML-Datei abzuspeichern.

Ein kleines Beispiel zur Verwendung könnte zum Beispiel so aussehen:

private void buttonSerialisieren_Click(object sender, EventArgs e)
{
    //Blog-Objekt erstellen und mit Werten befüllen
    Blog blogObject = new Blog();
    blogObject.User = "maxmustermann";
    blogObject.Pass = "superpasswort";
    blogObject.Url = "www.code-bude.net";

    //Blog-Objekt serialisieren
    SerializeBlogToXML(blogObject);
}

Wenn alles geklappt hat, dürfte sich nun im Ausführungsverzeichnis eures Projektes eine Datei namens Blog.xml befinden. Diese sollte folgenden Inhalt haben:

<?xml version="1.0"?>
<Blog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <User>maxmustermann</User>
  <Pass>superpasswort</Pass>
  <Url>www.code-bude.net</Url>
</Blog>

Das einzige was jetzt noch fehlt, ist die Konvertierung eines nach XML serialisierten Objekts. Das geht sogar noch ein bisschen leichter, als das umwandeln in’s XML-Format.

public Blog DeserializeXmlToBlog()
{
    XmlSerializer serializer = new XmlSerializer(typeof(Blog));
    FileStream file = new FileStream(Application.StartupPath
                                        + "\\blog.xml",
                                        FileMode.Open);
    //Die Deserialize()-Methode gibt ein Object zurück. => casten!
    Blog blogList = serializer.Deserialize(file) as Blog;
    file.Close();
    return blogList;
}

Zum Abschluss noch mal ein Beispiel, in dem Serialisiert und Deserialisiert wird.

private void buttonSerialisieren_Click(object sender, EventArgs e)
{
    Blog blogObject = new Blog();
    blogObject.User = "maxmustermann";
    blogObject.Pass = "superpasswort";
    blogObject.Url = "www.code-bude.net";

    SerializeBlogToXML(blogObject);
    Blog blogFromXml = DeserializeXmlToBlog();
    MessageBox.Show(blogFromXml.Url);
}

Ich hoffe, ich habe das ganze verständlich genug beschrieben. Solltet ihr dennoch Fragen haben, schreibt mir einfach einen Kommentar.

Wer keine Lust hat, den Code von Hand zu tippen bzw. zu kopieren, der kann sich das Beispiel auch als Visual Studio 2010 Projekt herunterladen.

Viele Grüße,
Raffi

0

Artikel auf Blogspot erstellen – C# .NET Blogger API

Blogger C# API LogoHeute möchte ich euch zeigen, wie man mittels C# Blogartikel auf Blogger.com (Blogspot.com) erstellen kann. Hierfür benötigt ihr zu aller erst die Google.GData.Client.dll, welche ihr im Google. Net API Pack findet.
Das API-Pack könnte ihr euch hier von Google herunterladen. (Die Datei heißt Google_Data_API_Setup_2.0.1.0.msi. Beachtet bitte, dass sich die Versionsnummer – 2.0.1.0 – im Laufe der Zeit natürlich ändern kann.) Wenn ihr den Download abgeschlossen habt, installiert das Paket, öffnet ein neues Projekt im Visual Studio und bindet die Google.GData.Client.dll ein.
Die .dll-Datei findet ihr im Downloadverzeichnis des API-Pack. (Wie ihr eine DLL einbinden könnt, habe ich hier bereits beschrieben.)

Wenn ihr die DLL eingebunden habt, kann es auch schon losgehen. Einen Post aka Blogartikel könnt ihr wie folgt erstellen:

 

private static int AddPost(string title,
                                   string html,
                                   string[] labels,
                                   string user,
                                   string pass,
                                   string blogUrl
                                   bool isDraft)
{
	try
	{
		//Wird benötigt um Google Zertifikatfehler zu "umgehen"
		ServicePointManager.ServerCertificateValidationCallback =
			new RemoteCertificateValidationCallback
			(
				delegate { return true; }
			);

		//Eine Google Service Instanz wird erstellt. "blogger"
		//gibt den Dienst an, den wir nutzen wollen. "api_test"
		//gibt den Namen an, unter dem sich unsere Anwendung
		//ausweisen soll. Im Gegenteil zum Dienstparameter, der
		//für unser Beispiel auf "blogger" festgelegt ist, haben
		//wir beim Namen freie Wahl.
		Service service = new Service("blogger", "api_test");

		//Der Service Instanz werden die Benutzerdaten eines
		//gültigen Blogger (Google) Accounts überegeben.
		service.Credentials = new GDataCredentials(user, pass);

		//Ein neues Blogartikel Objekt wird (lokal) angelegt.
		AtomEntry newPost = new AtomEntry();

		//Die Überschrift des Blogartikels wird gesetzt
		newPost.Title.Text = title;

		//Der Inhalt des Blogartikel wird gesetzt.
		newPost.Content = new AtomContent();
		//Wenn ihr HTML-Code übergebt, solltet ihr zuvor sämtliche
		//Zeilenumbrüche entfernen, da Blogger sonst automatisch alle
		//Zeilenumbrüche durch <br /> ersetzt. Wenn man selbst schon
		//im Quelltext <br /> gesetzt hatte, wird einem sonst das
		//ganze Layout "zerfleddert".
		string[] breaks = new string[] { "\r\n", "\r", "\n" };
		foreach (string breakStr in breaks)
		{
			while (html.Contains(breakStr))
				html = html.Replace(breakStr, "");
		}
		newPost.Content.Content = html;
		newPost.Content.Type = "html";

		//Setzen der Labels für den Blogartikel.
		//(Labels bei Blogger entsprechen Kategorien/Tags)
		foreach (string labelRaw in labels)
		{
			AtomCategory cat = new AtomCategory();
			cat.Scheme = new Uri("http://www.blogger.com/atom/ns#");

			//Blogger verbietet bestimmte Zeichen in den Labels
			//Diese sollten zuvor herausgefiltert werden.
			string label = labelRaw;
			string[] forbiddenChars = new string[] { "&", "<", ">",
													 "@", "!", "," };
			foreach (string forbiddenChar in forbiddenChars)
			{
				while (label.Contains(forbiddenChar))
					label = label.Replace(forbiddenChar, "");
			}
			cat.Term = label;
			newPost.Categories.Add(cat);
		}

		//Festlegen, ob der Artikel direkt gepostet oder als Entwurf
		//gespeichert werden soll. (false = direkt Posten)
		newPost.IsDraft = isDraft;

		AtomEntry response = null;
		try
		{
			//Blogartikel absenden (Woher die blogUrl kommt,
                        //wird später im Artikel geklärt.
			response = service.Insert(new Uri(blogUrl), newPost);
		}
		catch (GDataRequestException iDontCare)
		{
			//Fehler beim Absenden aufgetreten
			if (iDontCare.ResponseString == "Blog has exceeded rate " +
								  "limit or otherwise requires word " +
								  "verification for new posts")
			{
				//Fehler tritt auf, wenn das Tageslimit an Posts
				//erreicht ist. (Mehr dazu weiter unten in
				//diesem Blogartikel.)
				return -2;
			}
			else
			{
				//Anderer Fehler aufgetreten
				throw iDontCare;
			}
		}
		if (response == null)
		{
			throw new Exception("Konnte keine Verbindung herstellen");
		}

		//Blogartikel erfolgreich abgesendet
		return 0;
	}
	catch
	{
		//Es ist ein Fehler aufgetreten
		return -1;
	}
}

Nun haben wir den größten Teil geschafft! Um nun einen Blogartikel zu posten, müssen wir nur noch die eben geschriebene Funktion aufrufen. Das könnte wie folgt aussehen:

Demo.AddPost("Meine Überschrift",
             "<b>das</b><br /><i>ist</i> ein test",
             new string[] { "test", "csharp", "api" },
             "maxmustermann@googlemail.com",
             "demo_passwort",
             "https://www.blogger.com/feeds/XXXXXX/posts/default");

Eine letzte Frage steht nun noch im Raum. Was ist die Blog-Url und wo kommt Sie her? Das klären wir nun. Die Url ist vom Grundaufbau her immer identisch. Lediglich die XXXXXXe müssen durch die ID des Blogs ersetzt werden. Eine Möglichkeit die komplette URL zu bekommen, möchte ich euch nachfolgend zeigen.
Nehmen wir an, euer Blog hat die URL: http://code-bude-test.blogspot.com – dann ist “code-bude-test” der Name des Blogs, den wir nun brauchen.

public static string SelectUserBlogPostUrl(string subdomain,
                                                   string user,
                                                   string pass)
{
	//Erstellen der Google Service Instanz
	ServicePointManager.ServerCertificateValidationCallback =
		new RemoteCertificateValidationCallback
		(
			delegate { return true; }
		);
	Service service = new Service("blogger", "api_test");
	service.Credentials = new GDataCredentials(user, pass);

	//Anfordern einer Liste mit allen Blogs, die unter
	//dem angegeben Google Account existieren
	FeedQuery query = new FeedQuery();
	query.Uri = new Uri("http://www.blogger.com/feeds/default/blogs");
	AtomFeed feed = service.Query(query);

	//Wenn die Liste mit den Blogs nicht null ist...
	string blogUrl = string.Empty;
	if (feed != null)
	{
		//Durchlaufe alle erhaltenen Blogs
		foreach (AtomEntry entry in feed.Entries)
		{
			//Überprüfe, ob der aktuelle Blog der gesuchte
			//Blog ist.
			if (entry.AlternateUri.Content.Contains(subdomain))
			{
				//Suche die Blog Post URL
				for (int i = 0; i < entry.Links.Count; i++)
				{
					if (entry.Links[i].Rel.Equals("http://schemas.google.com/g/2005#post"))
					{
						blogUrl = entry.Links[i].HRef.ToString();
					}
				}
				//Gebe die Blog Post Url zurück
				return blogUrl;
			}
		}
	}
	//Wenn keine URL gefunden wurde, gebe Blog Url
	//= string.empty zurück
	return blogUrl;
}

Nun haben wir alles zusammen. Mit den oben stehenden Funktionen könnt ihr nun die Blog Post Url herausfinden und mittels dieser und der AddPost-Funktion Blogartikel auf Blogger.com veröffentlichen.

Zum Abschluss noch ein paar Worte zum “Rate-Limit” (aka “Blog has exceeded rate limit or otherwise requires word verification for new posts”). Die Blogger API erlaubt nur eine gewisse Anzahl an Posts pro Tag. Eine genaue Zahl gibt Google nicht heraus. Aus Erfahrung kann ich jedoch sagen, dass es ziemlich genau 50 Artikel sind, die man am Tag veröffentlichen kann. Danach geht über die API gar nichts mehr.
Über die Weboberfläche von Blogger.com können jedoch weitere Artikel veröffentlicht werden. Hierbei muss nach Erreichen des Limits jedoch jedes Mal beim Veröffentlichen ein Captcha gelöst werden. Das Limit/die Sperre wird ziemlich genau nach 24 Stunden wieder zurückgesetzt.

So, das war’s dann aber auch wirklich für heute. Wenn ihr noch Fragen, oder noch besser, Anregungen und Ideen habt, dann schreibt einfach einen Kommentar.

Viele Grüße,
Raffi

0

Update: MySpace Loader 1.9 released

MySpaceLoader IconSo, neue Artikel gab es ja nun schon etwas länger nicht mehr. Das unter anderem daran, dass ich ganz gut damit beschäftigt war, den MySpace Loader zu überarbeiten. Und nun ist er fertig!

Vielen Dank, an alle Blogleser, die mir beim beheben der Bugs geholfen haben. Besonderer Dank gilt Hannah, die unermüdlich immer und immer wieder diverse Tests von mir ausgeführt hat, um den Fehler zu finden.

Die neue Version findet ihr hier:

MySpace Loader 1.9 Download

Changelog:

  • Bug behoben, der den Download von Songs bei einigen Usern verhinderte
  • Updatebenachrichtigungsdienst überarbeitet

 

English information:
I’ve finished my work on the new MySpaceLoader. The actual version for now is 1.9. In this release I’ve fixed a bug which stopped the download funtionality by some of the MySpaceLoader users. Also I implemented the updatecheck in a better way. 

Changelog:

  • Fixed the bug, which stopped the download functionality by some users
  • Improved the updatecheck/updateservice
54

Projekt: MySpace Loader – ein MySpace Downloader

english flag For english information scroll down please.

Ich habe die Tage mal wieder ein altes Projekt, welches noch zu Zeiten von net-blog.net enstanden ist, herausgekramt. Es geht um den MySpace Loader, welcher jedoch schon seit längerer Zeit nicht mehr funktionsfähig war. Die Betonung liegt auf war.
Nach einigen Stunden “Schönheitskur” und mehrere Operationen “am offenen Herzen” (am Quellcode), läuft er nun wieder.

Mit dem MySpace Loader könnt ihr, wie der Name schon sagt, Musik von MySpace herunterladen. Das Programm ermöglicht das Downloaden von mehrerern Songs auf einmal und kann diese dann auch in verschiedene Formate konvertieren und auf Wunsch mit ID3-Tags versehen. Das ganze ist, wie auch der Cloud Downloader, kostenlos. (Über eine Spende würde ich mich natürlich dennoch freuen.) Den Downloadlink findet ihr weiter unten im Artikel unter dem Youtube-Video.

Features:

  • Lädt jeden Song
  • Konvertiert auf Wunsch nach .mp3, .acc, .wma oder .ogg
  • Kostenlos (im Gegenteil zu z.B. Musicjacker)
  • Schnell, einfach und übersichtlich

MySpace Loader - Screenshot 1  MySpace Loader - Screenshot 2  MySpace Loader - Screenshot 3  MySpace Loader - Screenshot 4

Download: MySpace Loader 1.9

(You have to wait 5 seconds for download. After the 5 seconds click on the button on the upper right.)

 

English information:
The MySpace Loader is a piece of free software, developed and written by myself. With it you can download music from MySpace in less than 3 clicks for free. But that’s not all. The MySpace Loader also can convert your downloaded songs into different file formats like mp3, ogg or acc. If you like, it will automatically tag your songs with ID3-tags. If you want more information, watch the video at this article or write me a comment.
If you like my work, feel free to say thanks with a little donation. 

with best regards/viele Grüße,
Raffi

Du willst helfen? Dann Spende doch einfach. (Für deutsche Nutzer – €).
  
You want to help?
(For non-german users – $/USD)

0

Neue VirtualBox und Gasterweiterungen für Windows 8 erschienen

VirtualBox Windows 8Als ich gestern die VirtualBox startete, wurde ich mit der Meldung konfrontiert, dass es ein Update gäbe. Da hab ich doch gleich mal zugeschlagen und die neue Version (4.1.10) heruntergeladen und installiert.

Nach dem Update habe ich meine Windows 8 Maschine gebootet und nachgeschaut, ob es mittlerweile auch die passenden Gasterweiterungen gibt. Und siehe da, es gibt sie! Voller Freude wollte ich die Gasterweiterungen auch gleich installieren. Zack, das war wohl nichts. Während des Setups wurde der Bildschirm der virtuellen Maschine schwarz und auch nach einem Neustart wollte die Kiste nicht mehr so recht.
Also Windows 8 Consumer Preview Image gemountet und die Windowsinstallation wieder hergestellt. Nun startete die Maschine zwar wieder, aber die Metroapps wollten nicht mehr starten.

Langer Rede, kurzer Sinn – am Ende musste ich eine komplett neue virtuelle Maschine aufsetzen. Danach klappte es auch mit den Gasterweiterungen. Somit wird dann auch mein Tipp zum Setzen einer beliebigen Auflösung hinfällig.

Zum Schluss gibt’s noch ein paar Tipps zum installieren der Gasterweiterung:

  • Solltet ihr eine zusätzliche Bildschirmauflösung zur VirtualBox hinzugefügt haben, dann entfernt sie mit folgendem Befehl (Bei “NameMaschine” müsst ihr den Namen eurer virtuellen Box angeben):
    VBoxManage.exe setextradata "NameMaschine" CustomVideoMode1
    
  • Schaltet eure virtuelle Maschine vor der Installation der Gasterweiterungen herunter und verändert die Videoeinstellungen wie folgt:
    - Grafikspeicher mindestens 128MB
    - 3D-Beschleunigung muss aktiviert sein

Wenn ihr das beachtet und vielleicht sogar noch eine Sicherung anlegt, bevor ihr die Gasterweiterungen installiert, dann sollte auch nichts schief gehen.

Viele Grüße,
Raffi

weitere Seiten ... 1 2 3 4 5 6 7 8 9 10 11