কোনও প্রোগ্রামার একবার প্রয়োগ করার সিদ্ধান্ত নিলে এর প্রয়োগের IXmlSerializable
জন্য নিয়ম এবং সর্বোত্তম অনুশীলনগুলি কী কী? আমি শুনেছি যে GetSchema()
ফিরে আসা উচিত null
এবং ReadXml
ফিরে আসার আগে পরবর্তী উপাদানটিতে চলে যাওয়া উচিত। এটা কি সত্য? এবং কী WriteXml
- এটি কি বস্তুর জন্য একটি মূল উপাদান লিখতে হবে বা এটি ধারণা করা হয় যে ইতিমধ্যে মূল লেখা হয়েছে? শিশু অবজেক্টগুলিকে কীভাবে চিকিত্সা করা এবং লেখা উচিত?
আমার এখন যা আছে তার একটি নমুনা এখানে। আমি যেমন ভাল প্রতিক্রিয়া পেয়েছি তা আপডেট করব।
public class MyCalendar : IXmlSerializable
{
private string _name;
private bool _enabled;
private Color _color;
private List<MyEvent> _events = new List<MyEvent>();
public XmlSchema GetSchema() { return null; }
public void ReadXml(XmlReader reader)
{
if (reader.MoveToContent() == XmlNodeType.Element && reader.LocalName == "MyCalendar")
{
_name = reader["Name"];
_enabled = Boolean.Parse(reader["Enabled"]);
_color = Color.FromArgb(Int32.Parse(reader["Color"]));
if (reader.ReadToDescendant("MyEvent"))
{
while (reader.MoveToContent() == XmlNodeType.Element && reader.LocalName == "MyEvent")
{
MyEvent evt = new MyEvent();
evt.ReadXml(reader);
_events.Add(evt);
}
}
reader.Read();
}
}
public void WriteXml(XmlWriter writer)
{
writer.WriteAttributeString("Name", _name);
writer.WriteAttributeString("Enabled", _enabled.ToString());
writer.WriteAttributeString("Color", _color.ToArgb().ToString());
foreach (MyEvent evt in _events)
{
writer.WriteStartElement("MyEvent");
evt.WriteXml(writer);
writer.WriteEndElement();
}
}
}
public class MyEvent : IXmlSerializable
{
private string _title;
private DateTime _start;
private DateTime _stop;
public XmlSchema GetSchema() { return null; }
public void ReadXml(XmlReader reader)
{
if (reader.MoveToContent() == XmlNodeType.Element && reader.LocalName == "MyEvent")
{
_title = reader["Title"];
_start = DateTime.FromBinary(Int64.Parse(reader["Start"]));
_stop = DateTime.FromBinary(Int64.Parse(reader["Stop"]));
reader.Read();
}
}
public void WriteXml(XmlWriter writer)
{
writer.WriteAttributeString("Title", _title);
writer.WriteAttributeString("Start", _start.ToBinary().ToString());
writer.WriteAttributeString("Stop", _stop.ToBinary().ToString());
}
}
সংশ্লিষ্ট নমুনা এক্সএমএল
<MyCalendar Name="Master Plan" Enabled="True" Color="-14069085">
<MyEvent Title="Write Code" Start="-8589241828854775808" Stop="-8589241756854775808" />
<MyEvent Title="???" Start="-8589241828854775808" Stop="-8589241756854775808" />
<MyEvent Title="Profit!" Start="-8589247048854775808" Stop="-8589246976854775808" />
</MyCalendar>