C# • Read and Write Anything

Listing 3. You can leverage generics to provide a utility class that's much more useful. These two generic methods work together to provide read/write capability to any class using the XML Serializer.

{
	public static T CreateFromFile<T>(string pathName) 
		where T : new()
	{
		T rVal = new T();
		if (!File.Exists(pathName))
			return rVal;

		FileStream fsStorage = null;
		XmlReader reader = null;

		try {
			fsStorage = new FileStream(pathName, 
				FileMode.Open);
			reader = new XmlTextReader(fsStorage);
			XmlSerializer serializer = 
				new XmlSerializer(typeof(T));
			rVal = (T)serializer.Deserialize(reader);
			} catch (System.InvalidOperationException) {
			// The file was not a valid XML file. 
			// Return a default object.
		} finally {
		if (reader != null)
			reader.Close();
		if (fsStorage != null)
			fsStorage.Close();
		}
		return rVal;
	}

	public static void SaveToFile<T>(T value, 
		string pathName)
	{
		using (TextWriter writer = new
			StreamWriter(pathName))
		{
			XmlSerializer serializer =
				new XmlSerializer(typeof(T));
			serializer.Serialize(writer, value);
		}
	}
}