Tôi đang viết mã để làm xml serialization. Với chức năng dưới đây.Tại sao lớp XML-Serializable cần một hàm tạo tham số
public static string SerializeToXml(object obj)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType());
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, obj);
return writer.ToString();
}
}
Nếu đối số là một thể hiện của lớp không có hàm tạo tham số, nó sẽ ném một ngoại lệ.
Unhandled Exception: System.InvalidOperationException: CSharpConsole.Foo không thể được đăng bởi vì nó không có một constructor parameterless. tại System.Xml.Serialization.TypeDesc.CheckSupported() tại System.Xml.Serialization.TypeScope.GetTypeDesc (Type loại, MemberInfo sourc e, Boolean directReference, Boolean throwOnError) tại System.Xml.Serialization. ModelScope.GetTypeModel (Type loại, Boolean tham khảo trực tiếp) tại System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (Type loại, XmlRootAttribute gốc, string defaultNamespace) tại System.Xml.Serialization.XmlSerializer..ctor (Type loại, String defaultName không gian) tại System.Xml.Serialization.XmlSerializer..ctor (Loại type)
Tại sao phải có một hàm tạo tham số để cho phép xml serialization thành công?
CHỈNH SỬA: cảm ơn câu trả lời của cfeduke. Các constructor parameterless có thể được tư nhân hoặc nội bộ.
Nếu bạn quan tâm, tôi tìm thấy cách tạo đối tượng mà không cần hàm tạo (xem cập nhật) - nhưng điều này sẽ không giúp XmlSerializer chút nào - nó vẫn yêu cầu nó. Hữu ích cho mã tùy chỉnh, có thể. –
'XmlSerializer' yêu cầu một hàm tạo parameterless mặc định cho việc deserialization. –