การทำให้เป็นอนุกรมของคลาสที่มี DataTable ใน C #

เป็นไปได้ไหมที่จะทำซีเรียลไลซ์คลาสที่มีคุณสมบัติประเภท DataTable?

ตัวอย่าง:

public class MyMessage
{ 
    public DataTable Fields { get; set; }

    public string Code { get; set; }
    public string Name { get; set; }

}

คุณสมบัติ DataTable ส่วนใหญ่ควรได้รับการตกแต่งด้วยแอตทริบิวต์ แต่อย่างไร

นี่คือรหัสของฉัน:

XmlSerializer xs = new XmlSerializer(typeof(MyMessage));
StringWriter sw = new StringWriter();
var str = xs.Serialize(sw, msg);

ฉันได้รับข้อยกเว้น: ไม่สามารถทำให้ DataTable เป็นอนุกรมได้ ไม่ได้ตั้งชื่อ DataTable


person iljon    schedule 14.02.2018    source แหล่งที่มา
comment
เป็นไปได้ไหม? คุณลอง?   -  person Chetan Ranpariya    schedule 14.02.2018
comment
ฉันคิดว่ามันเป็นไปได้ แต่มีสาขาอื่นนอกเหนือจากข้อมูล ฉันเชื่อว่าไม่ใช่สิ่งที่คุณต้องการ   -  person novac    schedule 14.02.2018
comment
ซีเรียลไลซ์เซชั่นแบบไหน? มี DataTable.WriteXml msdn.microsoft.com/en -us/library/   -  person Nekeniehl    schedule 14.02.2018
comment
DataTable คือ [Serializable] คุณมีข้อยกเว้นหรือทำไมคุณถึงถามคำถามนี้? โดยทั่วไป หากมีคุณสมบัติประเภทที่ไม่สามารถทำให้เป็นอนุกรมได้ คุณจะต้องสร้างคุณสมบัติอื่นใน getter/setter ซึ่งคุณแปลงเป็น/จากประเภทที่ไม่สามารถทำให้เป็นอนุกรมได้ และรับ/ตั้งค่าคุณสมบัติดั้งเดิม (ขณะทำเครื่องหมายคุณสมบัติดั้งเดิมด้วย [XmlIgnore])   -  person Sinatr    schedule 14.02.2018
comment
ดูเหมือนว่า ไม่สามารถทำให้ DataTable เป็นอนุกรมได้ ไม่ได้ตั้งชื่อ DataTable หรือ เหตุใดจึงไม่สามารถทำให้ DataTable เป็นอนุกรมได้ ไม่ได้ตั้งชื่อ DataTable ? คุณได้ลองตั้งค่า DataTable.TableName แล้วหรือยัง ถึงสิ่งที่แนะนำโดยคำตอบเหล่านั้นและข้อความยกเว้นเอง?   -  person dbc    schedule 14.02.2018


คำตอบ (1)


ทำเครื่องหมาย MyMessage เป็นอนุกรมแล้วเช่นนั้น:

 MyMessage test = new MyMessage();
 DataTable table = new DataTable();
 table.TableName = "test";
  ...init...
  test.Fields = table;
  using (Stream fs = new FileStream("Test.xml", FileMode.Create))
  {
    XmlTextWriter writer = new XmlTextWriter(fs, Encoding.UTF8);
    writer.Formatting = Formatting.Indented;
    new XmlSerializer(typeof(MyMessage)).Serialize(writer, test);
  }
person Flocke    schedule 14.02.2018
comment
XmlSerializer ละเว้นแอตทริบิวต์ [Serializable] ไม่จำเป็นต้อง ทำเครื่องหมาย MyMessage เป็นอนุกรม สิ่งที่จำเป็นคือการตั้งค่า table.TableName - person dbc; 14.02.2018