Search
Close this search box.

Serialize and deserialize objects as Xml using generic types in C# 2.0

I’ve been using Object<>Xml serialization in .NET based on this post for a while. I decided to enhance it a tad bit with some generics, so I could use it more broadly. Here’s what I came up with:

using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.IO;
using System.Xml.Serialization;

/// <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 static 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 static Byte[] StringToUTF8ByteArray(string pXmlString) {
  UTF8Encoding encoding = new UTF8Encoding();
  byte[] byteArray = encoding.GetBytes(pXmlString);
  return byteArray;
}

/// <summary>
/// Serialize an object into an XML string
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static string SerializeObject<T>(T obj) {
  try {
    string xmlString = null;
    MemoryStream memoryStream = new MemoryStream();
    XmlSerializer xs = new XmlSerializer(typeof(T));
    XmlTextWriter xmlTextWriter =
        new XmlTextWriter(memoryStream, Encoding.UTF8);
    xs.Serialize(xmlTextWriter, obj);
    memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
    xmlString = UTF8ByteArrayToString(memoryStream.ToArray());
    return xmlString;
  } catch {
    return string.Empty;
  }
}

/// <summary>
/// Reconstruct an object from an XML string
/// </summary>
/// <param name="xml"></param>
/// <returns></returns>
public static T DeserializeObject<T>(string xml) {
  XmlSerializer xs = new XmlSerializer(typeof(T));
  MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(xml));
  XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
  return (T)xs.Deserialize(memoryStream);
}

Print | posted @ Friday, July 20, 2007 8:35 AM

This article is part of the GWB Archives. Original Author: Paul’s development blog

Related Posts