Estoy escribiendo código para hacer la serialización Xml. Con la siguiente función.
public static string SerializeToXml(object obj)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType());
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, obj);
return writer.ToString();
}
}
Si el argumento es una instancia de clase sin un constructor sin parámetros, arrojará una excepción.
Excepción no controlada: System.InvalidOperationException: CSharpConsole.Foo no se puede serializar porque no tiene un constructor sin parámetros. en System.Xml.Serialization.TypeDesc.CheckSupported () en System.Xml.Serialization.TypeScope.GetTypeDesc (Tipo de tipo, MemberInfo sourc e, Boolean directReference, Boolean throwOnError) en System.Xml.Serialization.ModelScope.GetTypeModel (Type type, modelo Referencia directa booleana) en System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (Type type, XmlRootAttribute root, String defaultNamespace) en System.Xml.Serialization.XmlSerializer..ctor (Type type, String defaultName space) en System.Xml.Serialization. XmlSerializer..ctor (Tipo de tipo)
¿Por qué debe haber un constructor sin parámetros para permitir que la serialización xml tenga éxito?
EDITAR: gracias por la respuesta de cfeduke. El constructor sin parámetros puede ser privado o interno.
XmlSerializer
requiere un constructor sin parámetros predeterminado para la deserialización.