That would get more control over serialization, how to save and load types
Implement ISerializable interface and create an empty constructor to compile
[Serializable]
public class Item : ISerializable
{
    private string _name;
    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }
    public Item ()
    {
    }
    protected Item (SerializationInfo info, StreamingContext context)
    {
        _name = (string)info.GetValue("_name", typeof(string));
    }
    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("_name", _name, typeof(string));
    }
}
For data serialization, you can specify the desired name and the desired type
info.AddValue("_name", _name, typeof(string));
When the data is deserialized, you will be able to read the desired type
_name = (string)info.GetValue("_name", typeof(string));