Piszę kod do serializacji XML. Z poniższą funkcją.
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 wystąpieniem klasy bez konstruktora bez parametrów, zgłosi wyjątek.
Nieobsługiwany wyjątek: System.InvalidOperationException: nie można serializować CSharpConsole.Foo, ponieważ nie ma konstruktora bez parametrów. at System.Xml.Serialization.TypeDesc.CheckSupported () at System.Xml.Serialization.TypeScope.GetTypeDesc (Type type, MemberInfo sourc e, Boolean directReference, Boolean throwOnError) at System.Xml.Serialization.ModelScope.GetType (TypeModelScope.GetType Boolean direct Reference) w System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (Type type, XmlRootAttribute root, String defaultNamespace) at System.Xml.Serialization.XmlSerializer..ctor (Type type, String defaultName space) at System.Xml.Serialization. XmlSerializer..ctor (typ typu)
Dlaczego musi istnieć konstruktor bez parametrów, aby umożliwić pomyślną serializację XML?
EDYCJA: dzięki za odpowiedź cfeduke. Konstruktor bez parametrów może być prywatny lub wewnętrzny.
XmlSerializer
wymaga domyślnego konstruktora bez parametrów do deserializacji.