I think that that the problem you're attempting to solve has already been solved in the System.Configuration namespace?
I think this article on Code Project by Jon Rista gives a great overview how to use the Configuration classes and should help you accomplish what you're looking for.
If that's not exactly what you need you may want to consider making a serialization assembly for your project which will allow you to create assembly that contains your config class.
I ran into problems with deserialization and serialization whenever I did not create the deserializer and serializer classes during compilation. You will find over time what happens is the XmlSerialization classes that are created during runtime aren't always created or available and you'll encounter errors.
The easiest way do this is to create a new Assembly project and add a Serializeable() class with a public read/write property. Then you can use sgen to create a serializer assembly in the Post Build event like so...
sgen /a:$(TargetFileName) /force /verbose
Then you'll need to reference your Serializable assembly in whatever Assembly you'd like to perform the serialization in. As long as the AssemblyName.Serializable.Serializers are available in your bin or probing path then the dynamic assemblies won't be created at runtime and you won't encounter errors.
Once that's done you'll be able to serialize and deserialize the types that are contained within your serialization assembly.
Serializing....
IsolatedStorageFile isolatedStorage = IsolatedStorageFile.GetUserStoreForAssembly();
using (IsolatedStorageFileStream stream = new
IsolatedStorageFileStream(key, FileMode.Create, isolatedStorage))
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
serializer.Serialize(stream, value);
}
Deserializing
using (IsolatedStorageFile isolatedStorage =
IsolatedStorageFile.GetUserStoreForAssembly())
{
using (IsolatedStorageFileStream stream =
new IsolatedStorageFileStream(
key, FileMode.OpenOrCreate, FileAccess.ReadWrite, isolatedStorage))
{
if (stream.Length > 0)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
return (T)serializer.Deserialize(stream);
}
else
{
return default(T);
}
}
}