ฉันกำลังเขียนโค้ดเพื่อทำซีเรียลไลซ์เซชั่นของ 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();
}
}
ถ้าอาร์กิวเมนต์เป็นอินสแตนซ์ของคลาสที่ไม่มีตัวสร้างแบบไม่มีพารามิเตอร์จะมีข้อยกเว้น
Unhandled Exception: System.InvalidOperationException: CSharpConsole.Foo ไม่สามารถทำให้เป็นอนุกรมได้เนื่องจากไม่มี Constructor แบบไม่มีพารามิเตอร์ ที่ System.Xml.Serialization.TypeDesc.CheckSupported () ที่ System.Xml.Serialization.TypeScope.GetTypeDesc (ประเภทประเภท MemberInfo sourc e, บูลีน directReference, บูลีน throwOnError) ที่ System.Xml.Serialization.TypeDesc.CheckSupported () ที่ System.Xml.Serialization.TypeDesc.CheckSupported () การอ้างอิงบูลีนโดยตรง) ที่ System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (ประเภทประเภทราก XmlRootAttribute, สตริง defaultNamespace) ที่ System.Xml.Serialization.XmlSerializer .. ประเภทชนิดพื้นที่สตริง defaultName ที่ System.Xml.Serializer XmlSerializer..ctor (ประเภทประเภท)
ทำไมต้องมีคอนสตรัคเตอร์แบบไม่มีพารามิเตอร์เพื่อให้ xml เป็นอนุกรมสำเร็จ
แก้ไข: ขอบคุณสำหรับคำตอบของ cfeduke ตัวสร้างแบบไม่มีพารามิเตอร์สามารถเป็นแบบส่วนตัวหรือแบบภายใน
XmlSerializer
ต้องการตัวสร้างแบบไม่มีพารามิเตอร์เริ่มต้นสำหรับการดีซีเรียลไลซ์เซชัน