Hi,

I don't think you can serialize hashtables (easily) to XML:

http://blogs.msdn.com/psheill/archive/2005/04/09/406823.aspx
http://codebetter.com/blogs/geoff.appleby/archive/2004/11/13/32005.aspx

I did something similar a while back in mono with ArrayLists and that worked
fine:

        [Serializable]
        public  class SearchList
        {
                [XmlElement(typeof(SearchType), ElementName = "SearchType")]
                public ArrayList Items = new ArrayList();
etc...

but I remember reading back then that hastables were a pain...

Regards,

--chris



On Wed, 11 May 2005, Ricardo Gladwell wrote:

> I'm getting the following exception when I attempt to deserialize some
> objects in my application using System.Xml.Serialization:
>
> System.InvalidOperationException: The type WebPuppy.Model.Site was not
> expected. Use the XmlInclude or SoapInclude attribute to specify types
> that are not known statically.
>
> I've been careful to include all the relevant objects using the
> XmlIncludeAttribute so I can't figure out why the XML serializer is not
> properly finding the Site object. See code fragment below:
>
> using System.Collections;
> using System.IO;
> using System.Xml.Serialization;
>
> public class Test {
>      public static void Main () {
>          Configuration configuration = new Configuration();
>          Site site = new Site();
>          site.Id = "id";
>          configuration.Sites.Add( site );
>          XmlSerializer serializer = new XmlSerializer (typeof
> (Configuration));
>          using (FileStream fs = new FileStream ("test.xml",
> FileMode.Create)) {
>              serializer.Serialize (fs, configuration);
>          }
>      }
> }
>
> public class Configuration {
>
>       Folder sites = new Folder();
>
>       public Folder Sites
>       {
>               get {
>                       return sites;
>               }
>               set {
>                       this.sites = value;
>               }
>       }
>
> }
>
> [XmlInclude (typeof (Folder))]
> [XmlInclude (typeof (Site))]
> public abstract class Artifact {
>       public string Id;
> }
>
> public class Folder : Artifact, IEnumerable
> {
>       private Hashtable artifacts = new Hashtable ();
>
>       public IEnumerator GetEnumerator ()
>       {
>               return artifacts.Values.GetEnumerator ();
>       }
>
>       public void Add(object o) {
>          Artifact artifact = (Artifact) o;
>               artifacts[artifact.Id] = (Artifact) artifact;
>       }
> }
>
> public class Site : Folder
> {
> }
> _______________________________________________
> Mono-list maillist  -  Mono-list@lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list
>
_______________________________________________
Mono-list maillist  -  Mono-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to