XML serialization of hash table(C#3.0)

前端 未结 3 528
一个人的身影
一个人的身影 2021-01-21 05:20

Hi I am trying to serialize a hash table but not happening

private void Form1_Load(object sender, EventArgs e)
        {
            Hashtable ht = new Hashtable         


        
相关标签:
3条回答
  • 2021-01-21 05:41

    You can create your own Hashtable derived from standart Hashtable with implementation of IXmlSerializable. So you will implmenent ReadXml(XmlReader reader) & WriteXml(XmlWriter writer) where you can put your own logic on how to read and write values from your Hashtablw with given XmlReader & XmlWriter.

    0 讨论(0)
  • 2021-01-21 05:48

    I suggest you use DataContractSerializer, it's more powerful and easier to use.

    0 讨论(0)
  • 2021-01-21 05:53

    First of all starting with C# 2.0 you can use type safe version of very old Hashtable which come from .NET 1.0. So you can use Dictionary<DateTime, int>.

    Starting with .NET 3.0 you can use DataContractSerializer. So you can rewrite you code like following

    private void Form1_Load(object sender, EventArgs e)
        {
            MyHashtable ht = new MyHashtable();        
    
            DateTime dt = DateTime.Now;
            for (int i = 0; i < 10; i++)
                ht.Add(dt.AddDays(i), i);           
            SerializeToXmlAsFile(typeof(Hashtable), ht);
        }
    

    where SerializeToXmlAsFile and MyHashtable type you define like following:

    [CollectionDataContract (Name = "AllMyHashtable", ItemName = "MyEntry",
                             KeyName = "MyDate", ValueName = "MyValue")]
    public class MyHashtable : Dictionary<DateTime, int> { }
    
    private void SerializeToXmlAsFile(Type targetType, Object targetObject)
        {
            try {
                string fileName = @"C:\output.xml";
                DataContractSerializer s = new DataContractSerializer (targetType);
                XmlWriterSettings settings = new XmlWriterSettings ();
                settings.Indent = true;
                settings.IndentChars = ("    ");
                using (XmlWriter w = XmlWriter.Create (fileName, settings)) {
                    s.WriteObject (w, targetObject);
                    w.Flush ();
                }
            }
            catch (Exception ex) { throw ex; }
        }
    

    This code produce C:\output.xml file with the following contain:

    <?xml version="1.0" encoding="utf-8"?>
    <AllMyHashtable xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://schemas.datacontract.org/2004/07/DataContractXmlSerializer">
        <MyEntry>
            <MyDate>2010-06-09T22:30:00.9474539+02:00</MyDate>
            <MyValue>0</MyValue>
        </MyEntry>
        <MyEntry>
            <MyDate>2010-06-10T22:30:00.9474539+02:00</MyDate>
            <MyValue>1</MyValue>
        </MyEntry>
        <!-- ... -->
    </AllMyHashtable>
    

    So how we can see all names of the elements of the destination XML files we can free define.

    0 讨论(0)
提交回复
热议问题