Я пишу код для сериализации Xml. С функцией ниже.Зачем классу XML-Serializable нужен конструктор без параметров
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 е, булева directReference, булева throwOnError) на System.Xml.Serialization. ModelScope.GetTypeModel (тип тип, Boolean прямая ссылка) на System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (тип типа, XmlRootAttribute корень, String DefaultNamespace) в System.Xml.Serialization.XmlSerializer..ctor (тип type, String defaultName space) в System.Xml.Serialization.XmlSerializer..ctor (Тип )
Зачем нужен конструктор без параметров, чтобы обеспечить успешность сериализации xml?
EDIT: спасибо за ответ cfeduke. Конструктор без параметров может быть закрытым или внутренним.
Если вам интересно, я нашел, как создавать объекты без использования конструктора (см. Обновление), но это вообще не поможет XmlSerializer - оно все еще требует этого. Может быть, полезно для пользовательского кода. – 2008-12-24 17:18:28
`XmlSerializer` требует конструктора без параметров по умолчанию для десериализации. – 2015-08-14 13:25:56