J'écris du code pour faire la sérialisation Xml. Avec la fonction ci-dessous.
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 l'argument est une instance de classe sans constructeur sans paramètre, il lèvera une exception.
Exception non gérée: System.InvalidOperationException: CSharpConsole.Foo ne peut pas être sérialisé car il n'a pas de constructeur sans paramètre. à System.Xml.Serialization.TypeDesc.CheckSupported () à System.Xml.Serialization.TypeScope.GetTypeDesc (Type type, MemberInfo sourc e, Boolean directReference, Boolean throwOnError) à System.Xml.Serialization.ModelScope.GetTypeModel (Type type, Boolean direct Reference) à System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (Type type, racine XmlRootAttribute, String defaultNamespace) à System.Xml.Serialization.XmlSerializer..ctor (Type type, String defaultName space) à System.Xml.Serialization. XmlSerializer..ctor (type de type)
Pourquoi doit-il y avoir un constructeur sans paramètre pour permettre à la sérialisation XML de réussir?
EDIT: merci pour la réponse de cfeduke. Le constructeur sans paramètre peut être privé ou interne.
XmlSerializer
nécessite un constructeur sans paramètre par défaut pour la désérialisation.