[Mono-list] XmlIncludeAttribute missing class
Chris Turchin
chris@turchin.net
Wed, 11 May 2005 05:34:41 -0700 (PDT)
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
>