27 Jun 2007

Serialize - Deserialize Classes

Το παρακάτω Class μπορείτε να το χρησιμοποιήσετε για να κάνετε Serialize και Deserialize ένα Class. Είναι πολύ χρήσιμο αν θέλετε να αποθηκεύετε τα Classes είτε στο δίσκο είτε στη βάση δεδομένων. Παρακάτω έχω το Class και ένα παράδειγμα.

#region Using directives
using System;
using System.Text;
using System.Xml;
using System.IO;
using System.Xml.Serialization;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters.Binary;
#endregion


[Serializable()]
public class Serialization<T>
{

 public string ToXml()
 {
  StringWriter Output = new StringWriter(new StringBuilder());
  string Ret = "";

  try
  {
   XmlSerializer s = new XmlSerializer(this.GetType());
   s.Serialize(Output, this);

   // To cut down on the size of the xml being sent to the database, we'll strip
   // out this extraneous xml.

   Ret = Output.ToString().Replace("xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"", "");
   Ret = Ret.Replace("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"", "");
   Ret = Ret.Replace("<?xml version=\"1.0\" encoding=\"utf-16\"?>", "").Trim();
  }
  catch (Exception) { throw; }

  return Ret;
 }

 public T FromXml(string pXmlizedString)
 {
  try
  {
   XmlSerializer xs = new XmlSerializer(this.GetType());

   MemoryStream memoryStream =
            new MemoryStream(StringToUTF8ByteArray(pXmlizedString));
   XmlTextWriter xmlTextWriter =
            new XmlTextWriter(memoryStream, Encoding.UTF8);

   return (T) xs.Deserialize(memoryStream);               

  }
  catch (Exception) { throw; }
 }

 public T CloneObject(T obj)
 {
  T retObj;

  // Create a memory stream and a formatter.
  MemoryStream ms = new MemoryStream(1000);
  BinaryFormatter bf = new BinaryFormatter();

  // Serialize the object into the stream.
  bf.Serialize(ms, obj);           
  // Position streem pointer back to first byte.
  ms.Seek(0, SeekOrigin.Begin);
  // Deserialize into another object.
  retObj = (T)bf.Deserialize(ms);
  // Release memory.
  ms.Close();

  return retObj;
 }

 /// <summary>
 /// To convert a Byte Array of Unicode values (UTF-8 encoded) to a complete String.
 /// </summary>
 /// <param name="characters">Unicode Byte Array to be converted to String</param>
 /// <returns>String converted from Unicode Byte Array</returns>
 private String UTF8ByteArrayToString(Byte[] characters)
 {
  UTF8Encoding encoding = new UTF8Encoding();
  String constructedString = encoding.GetString(characters);
  return (constructedString);
 }

 /// <summary>
 /// Converts the String to UTF8 Byte array and is used in De serialization
 /// </summary>
 /// <param name="pXmlString"></param>
 /// <returns></returns>
 private Byte[] StringToUTF8ByteArray(String pXmlString)
 {
  UTF8Encoding encoding = new UTF8Encoding();
  Byte[] byteArray = encoding.GetBytes(pXmlString);
  return byteArray;
 }
}

Το παραπάνω είναι όλο το Class. Γενικά χρησιμοποιεί Generics έτσι ώστε να παίζει με οτιδήποτε τύπο Class, αρκεί φυσικά το Class το οποίο θέλουμε να αποθηκεύσουμε να είναι Serializable.

Παράδειγμα: 


[Serializable()]
public class Customer : Serialization<Customer>
{
  private string _FirstName;
  private string _LastName;

  public string FirstName
  {
   get { return _FirstName; }
   set { _FirstName = value;}
  }
 
  public string LastName
  {
   get { return _LastName; }
   set { _LastName = value;}
  }
 
  public Custοmer() {}

  public Customer(string firstName, string lastName)
  {
   _FirstName = firstName;
   _LastName = lastName;
  }
}

Το παραπάνω είναι ένα απλό Class με δύο Properties (Firstname και Lastname). Θα μπορούσαμε τώρα μέσα απο το πρόγραμμα μας να δώσουμε :

    Customer cus = new Customer("George","Chatzimanolis");
    //κάνουμε Serialize το Class σε ένα string   
    string Sres = cus.ToXml();

    //Κάνουμε Deserialize το string σε ένα Object Customer
   Customer newCus = new Customer();
   newCus = newCus.FromXml(Sres);

Serialization.cs (2.95 kb)

Categories: Programming

Currently rated 5.0 by 2 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
20 Jun 2007

Η ΔΕΗ, το BlackOut και ο χαμηλομισθωτός

Εδώ και αρκετές ημέρες, όταν πήρα την απόφαση να φτιάξω αυτό το Blog, είχα πει ότι το πρώτο ουσιαστικό θέμα που θα σχολιάσω θα ήταν τεχνολογικό. Όμως από ότι φαίνεται τα πλάνα μου άλλαξαν μιας και με πρόλαβε η επικαιρότητα.

Η μεγάλη άνοδος της θερμοκρασίας τις τελευταίες ημέρες λένε ότι έχει προκαλέσει προβληματισμό στη ΔΕΗ και γενικότερα στο υπουργείο Εσωτερικών. Ήδη είχαμε το πρώτο Blackout  και απ’ ότι φαίνεται θα ακολουθήσουν και άλλα. Μια μέρα νωρίτερα όμως διαβάζοντας μία Κυριακάτικη εφημερίδα πληροφορήθηκα έκπληκτος ότι ο διοικητής της ΔΕΗ κος Τάκη Αθανασόπουλος αποφάσισε να δώσει μία αύξηση στις ετήσιες αποδοχές του κάτι με το οποίο συμφώνησε και ο κος Πέτρος Δούκας (υφυπουργός οικονομικών). Θα μου πείτε που είναι το πρόβλημα; Όλοι δεν δικαιούνται μία ετήσια αύξηση; Και θα σας απαντήσω ότι έτσι είναι. Το θέμα όμως είναι ότι η ετήσια αύξηση που θα λάβει ο κος Αθανασόπουλος είναι της τάξης των 200.000 €, και για να είμαστε ακόμα πιο ακριβής η αύξηση είναι 100.000€ συν 100.000€ ως μπόνους παραγωγικότητας. Ο σημερινός του ετήσιος μισθός δε είναι 200.000€ οπότε κάνοντας μια απλή πρόσθεση θα δούμε ότι από εδώ και στο εξής οι ετήσιες απολαβές του θα φτάνουν το ποσό των 400.000 €. Να αναφέρω ακόμα ότι το μπόνους παραγωγικότητας ο κος Αθανασόπουλος θα το πάρει γιατί προφανώς θα καταφέρει να αυξήσει τα κέρδη της εταιρίας, μιας και ήδη ανακοίνωσε αυξήσεις στα τιμολόγια επειδή σύμφωνα με τον ίδιο ακρίβυνε το πετρέλαιο. Το αστείο βέβαια είναι ότι ο κος Αθανασόπουλος γκρίνιαζε και έλεγε ότι δυστυχώς τα στελέχη των εταιριών που ανήκουν στο δημόσιο δεν πληρώνονται το ίδιο καλά με αυτά που δουλεύουν σε κάποια εταιρία του ιδιωτικού τομέα. Βέβαια εγώ αμφιβάλω αν θα μπορούσε ποτέ να πάρει αυτά τα λεφτά στον ιδιωτικό τομέα.

Η ΔΕΗ λοιπόν, σε  μία χώρα με πολύ μεγάλο ποσοστό ηλιοφάνειας όπως είναι η Ελλάδα δεν έχει φροντίσει να κατασκευάσει αρκετές φωτοβολταϊκές μονάδες και να εκμεταλλευτεί τη δωρεάν ενέργεια που θα μπορούσαμε να έχουμε, αντίθετα έχει βασιστεί στην παραγωγή ενέργειας μέσω πετρελαίου με αποτέλεσμα όποτε έρχεται καλοκαίρι να φοβόμαστε να κάνουμε οτιδήποτε μιας και μπορεί να γίνει Blackout. Το θέμα των λεγόμενων αυξήσεων λόγο πετρελαίου δεν το αναφέρω μιας και αυτό ίσως γίνεται και επίτηδες. Βλέπετε από κάπου θα πρέπει να βγουν και οι αυξήσεις των χαμηλομισθωτών όπως ο κος Αθανασόπουλος.

Categories: General

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
18 Jun 2007

Καλώς ήρθατε

Καλώς ήρθατε στο blog μου. Πάντα ήθελα να το γράψω αυτό. Tongue out

Είπα να ξεκινήσω και εγώ όπως και πολλά εκατομμύρια άνθρωποι το προσωπικό μου blog και να δημοσιεύσω τις σκέψεις μου αλλά και να μοιραστώ με γνωστούς και φίλους μερικές από τις εμπειρίες και τις γνώσεις μου. Η αλήθεια είναι ότι αυτή δεν είναι η πρώτη προσπάθεια για τη δημιουργία ενός Blog, αλλά η δεύτερη. Η πρώτη ήταν το Blog που είχα και ακόμη έχω στο www.pcmages.gr. Ο λόγος που έφτιαξα αυτό εδώ όμως το Blog είναι διότι θα ήθελα γενικά να μιλήσω για πολλά θέματα και όχι μόνο για θέματα που αφορούν την τεχνολογία. Εντάξει δεν μπορώ να αποφύγω να μιλήσω για τεχνολογία και προγραμματισμό μιας και είναι αναπόσπαστο κομμάτι της ζωής μου.

Το blog αυτό λοιπόν το παλεύω αρκετό καιρό τώρα αλλά η αλήθεια είναι ότι δεν είχα βρει χρόνο για να το δημιουργήσω. Όχι ότι τώρα έχω απλά λόγο καλοκαιριού τα πράγματα είναι πιο χαλαρά (απλά μπορείς να είσαι περισσότερες ώρες ξύπνιος
Wink ). Στην αρχή είπα να φτιάξω ένα δικό μου blog engine και να το στήσω εκεί. Ο λόγος φυσικά δεν ήταν ότι θα το έκανα γιατί τα engines που υπάρχουν δεν με ικανοποιούν, το αντίθετο θα έλεγα μάλιστα, απλά ήθελα να μπω στη διαδικασία να φτιάξω κάποιο Software που ίσως θα εξυπηρετούσε και άλλους χρήστες και μέσα από την κατασκευή του να μάθαινα αρκετά πράγματα. Τελικά όμως αυτή η ιδέα εγκαταλείφτηκε, τουλάχιστον προσωρινά, μιας και ο χρόνος μου το τελευταίο διάστημα είναι ιδιαίτερα περιορισμένος. Αποφάσισα λοιπόν να χρησιμοποιήσω το blogengine.net, ένα νέο software εξ ολοκλήρου σε .NET. Μέχρι στιγμής είμαι απόλυτα ικανοποιημένος από αυτό.

Αυτά λοιπόν ως μία πρώτη εισαγωγή. Θα τα πούμε πολύ σύντομα με κάτι ουσιαστικό για συζήτηση.

Tags:
Categories: General

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5