Hey, I tried the repro case on that bug and verified it works under .NET. Then I removed the parameterless constructor. .NET borked.
That means, instead of using XmlReader.ReadContentAsObject(), you would simply write like below. -------- IXmlSerializable x = (IXmlSerializable) Activator.CreateInstance ( col.DataType, new object [0]); if (!reader.IsEmptyElement) { reader.ReadStartElement (); reader.MoveToContent (); x.ReadXml (reader); reader.ReadEndElement (); } else reader.Skip (); row [col] = x; // not sure if it is filled in case of empty element... -------- Atsushi Eno Rodrigo Kumpera wrote: > Varadhan, > > Depending on exception on regular paths might lead to disastrous > performance. > Is this just a corner case for compatibility or this kind of situation > might happen often? > We might need to document this shortcoming of our stack. > > Thanks, > Rodrigo > > > On Wed, Jul 30, 2008 at 10:56 AM, Veerapuram Varadhan > ([EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>) > <[EMAIL PROTECTED] > <mailto:[EMAIL PROTECTED]>> wrote: > > Author: varadhan > Date: 2008-07-30 09:56:01 -0400 (Wed, 30 Jul 2008) > New Revision: 109263 > > Modified: > trunk/mcs/class/System.Data/System.Data/ChangeLog > trunk/mcs/class/System.Data/System.Data/XmlDataReader.cs > Log: > Fixes##377146 - handle custom reference types sanely when reading from > an XML file > > > Modified: trunk/mcs/class/System.Data/System.Data/ChangeLog > =================================================================== > --- trunk/mcs/class/System.Data/System.Data/ChangeLog 2008-07-30 > 13:40:00 UTC (rev 109262) > +++ trunk/mcs/class/System.Data/System.Data/ChangeLog 2008-07-30 > 13:56:01 UTC (rev 109263) > @@ -1,3 +1,8 @@ > +2008-07-29 Veerapuram Varadhan <[EMAIL PROTECTED] > <mailto:[EMAIL PROTECTED]>> > + > + Fixes ##377146 > + * XmlDataReader.cs (ReadElementElement): Handle custom > reference types sanely. > + > 2008-07-20 Gert Driesen <[EMAIL PROTECTED] > <mailto:[EMAIL PROTECTED]>> > > * DataColumnCollection.cs (IndexOf): Include name of column - > for which > > Modified: trunk/mcs/class/System.Data/System.Data/XmlDataReader.cs > =================================================================== > --- trunk/mcs/class/System.Data/System.Data/XmlDataReader.cs > 2008-07-30 13:40:00 UTC (rev 109262) > +++ trunk/mcs/class/System.Data/System.Data/XmlDataReader.cs > 2008-07-30 13:56:01 UTC (rev 109263) > @@ -26,6 +26,7 @@ > using System.IO; > using System.Data; > using System.Xml; > +using System.Xml.Serialization; > > > namespace System.Data > @@ -297,7 +298,27 @@ > > bool wasEmpty = reader.IsEmptyElement; > int depth = reader.Depth; > - row [col] = StringToObject > (col.DataType, reader.ReadElementString ()); > + > + if (typeof > (IXmlSerializable).IsAssignableFrom (col.DataType)) { > +#if NET_2_0 > + try { > + // NOTE: > ReadElementString works fine with proper XML with CDATA etc, > + // however doesn't > behave well with XMLs like the one in > + // > https://bugzilla.novell.com/show_bug.cgi?id=377146 which is > + // apparently > supported by MS.NET <http://MS.NET> - to maintain compatibility, > + // Try reading the > element content as an object type > + row [col] = > reader.ReadContentAsObject (); > + } catch { > +#endif > + // XML is not in > accordance to expected standards, try reading the content as an xml doc > + row [col] = > reader.ReadInnerXml (); > +#if NET_2_0 > + } > +#endif > + } else { > + row [col] = StringToObject > (col.DataType, reader.ReadElementString ()); > + } > + > if (!wasEmpty && reader.Depth > depth) { > // This means, instance does not > match with > // the schema (because the instance > element > > _______________________________________________ > Mono-patches maillist - [EMAIL PROTECTED] > <mailto:[EMAIL PROTECTED]> > http://lists.ximian.com/mailman/listinfo/mono-patches > > > > ------------------------------------------------------------------------ > > _______________________________________________ > Mono-devel-list mailing list > Mono-devel-list@lists.ximian.com > http://lists.ximian.com/mailman/listinfo/mono-devel-list _______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list