Estou escrevendo código para fazer serialização de XML. Com função abaixo.
public static string SerializeToXml(object obj)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType());
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, obj);
return writer.ToString();
}
}
Se o argumento for uma instância da classe sem construtor sem parâmetros, lançará uma exceção.
Exceção sem tratamento: System.InvalidOperationException: CSharpConsole.Foo não pode ser serializado porque não possui um construtor sem parâmetros. em System.Xml.Serialization.TypeDesc.CheckSupported () em System.Xml.Serialization.TypeScope.GetTypeDesc (Type type, MemberInfo sourc e, Boolean directReference, Boolean throwOnError) em System.Xml.Serialization.ModelScope.GetTypeModel (Type type, Referência direta booleana) em System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (Tipo de tipo, raiz XmlRootAttribute, String defaultNamespace) em System.Xml.Serialization.XmlSerializer..ctor (Tipo de tipo, String defaultName space) em System.Xml.Serialization. XmlSerializer..ctor (tipo Type)
Por que deve haver um construtor sem parâmetros para permitir que a serialização xml seja bem-sucedida?
EDIT: obrigado pela resposta de cfeduke. O construtor sem parâmetros pode ser privado ou interno.
XmlSerializer
requer um construtor sem parâmetros padrão para desserialização.