Piszę kod do serializacji Xml. Z poniższą funkcją.Dlaczego klasa XML-Serializable potrzebuje konstruktora bez parametrów
public static string SerializeToXml(object obj)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType());
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, obj);
return writer.ToString();
}
}
Jeśli argument jest instancją klasy bez konstruktora bez parametrów, wygeneruje wyjątek.
Unhandled Wyjątek: System.InvalidOperationException: CSharpConsole.Foo nie mogą być szeregowane ponieważ nie posiada konstruktora bez parametrów. w System.Xml.Serialization.TypeDesc.CheckSupported() w System.Xml.Serialization.TypeScope.GetTypeDesc (typ typu, MemberInfo Sourc e, Boolean directReference, Boolean throwOnError) w System.Xml.Serialization. ModelScope.GetTypeModel (typ typu Boolean bezpośredniego odniesienia) w System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (typ typu, XmlRootAttribute korzeniowego, String defaultNamespace) w System.Xml.Serialization.XmlSerializer..ctor (typ type, String defaultName space) at System.Xml.Serialization.XmlSerializer..ctor (Typ )
Dlaczego musi istnieć konstruktor bez parametrów, aby umożliwić serializację XML, aby odnieść sukces?
EDYCJA: dzięki za odpowiedź cfeduke. Konstruktor bez parametrów może być prywatny lub wewnętrzny.
Jeśli jesteś zainteresowany, znalazłem sposób tworzenia obiektów bez konieczności konstruktora (patrz aktualizacji) - ale to nie pomoże XmlSerializer w ogóle - to nadal wymaga. Przydatne może być dla niestandardowego kodu. –
'XmlSerializer' wymaga domyślnego konstruktora bez parametrów do deserializacji. –