Я пишу код для сериализации Xml. С функцией ниже.
public static string SerializeToXml(object obj)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType());
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, obj);
return writer.ToString();
}
}
Если аргумент является экземпляром класса без конструктора без параметров, он выдаст исключение.
Необработанное исключение: System.InvalidOperationException: CSharpConsole.Foo не может быть сериализовано, поскольку у него нет конструктора без параметров. в System.Xml.Serialization.TypeDesc.CheckSupported () в System.Xml.Serialization.TypeScope.GetTypeDesc (Тип тип, MemberInfo sourc e, логический directReference, Boolean throwOnError) в System.Xml.Serialization.ModelS TypeMetTepeTetGet Прямая логическая ссылка) в System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (Тип тип, корень XmlRootAttribute, String defaultNamespace) в System.Xml.Serialization.XmlSerializer..ctor (Тип тип, пространство String defaultName) в System.Xml.Serialization. XmlSerializer..ctor (Тип тип)
Почему должен существовать конструктор без параметров, чтобы обеспечить успешную сериализацию xml?
РЕДАКТИРОВАТЬ: спасибо за ответ cfeduke. Конструктор без параметров может быть закрытым или внутренним.
XmlSerializer
для десериализации требуется конструктор по умолчанию без параметров.