Yes I did.  I wrestled with it for a few hours and couldn't come up with
any reason.  I assume you're using .NET 1.1 and it should be noted that
IXmlSerializable is unsupported in 1.1 (it's documented in 2.0 so I hope
that means it's now supported for 2.0).

My needs were fairly simple so I resorted to creating a derived
Hashtable that implemented IXmlSerializable and controlled the XML
writing myself.  It worked for my needs but was definitely not a
"generic" solution.

--
Patrick Steele
Microsoft .NET MVP
http://weblogs.asp.net/psteele



-----Original Message-----
From: Discussion of advanced .NET topics.
[mailto:[EMAIL PROTECTED] On Behalf Of Alex Henderson
Sent: Tuesday, September 05, 2006 3:16 AM
To: ADVANCED-DOTNET@DISCUSS.DEVELOP.COM
Subject: [ADVANCED-DOTNET] IXmlSerializable problem...


I've implemented a few classes with custom XML serialization. work's
fine, but when a put more then one instance of that class into a
container, then serialization works, but when Deserializing only the
first instance is worked on - at which point all processing for the
remaining elements is abandoned... I'm sure it's probably easy to fix,
anyone come across this before?

Here's a test fixture to demonstrate my problem:

    [TestFixture]
    public class SettingsConverterFixture
    {
        [Test]
        public void MyContainerConvert()
        {
            XmlSerializer serializer = new
XmlSerializer(typeof(MyContainer));

            MemoryStream stream = new MemoryStream();

            MyContainer original = new MyContainer();
            original.Value1 = new CustomValue("1");
            original.Value2 = new CustomValue("2");

            Assert.AreEqual("1", original.Value1.Value);
            Assert.AreEqual("2", original.Value2.Value);

            serializer.Serialize(stream, original);

            stream.Seek(0, SeekOrigin.Begin);

            MyContainer reloaded =
(MyContainer)serializer.Deserialize(stream);

            Assert.AreEqual("1", reloaded.Value1.Value);
            Assert.IsNotNull(reloaded.Value2); // blows up here
            Assert.AreEqual("2", reloaded.Value2.Value);
        }
    }

    public class MyContainer
    {
        public CustomValue Value1;
        public CustomValue Value2;
    }

    public class CustomValue : IXmlSerializable
    {
        private string _value;

        public string Value
        {
            get { return _value; }
        }

        public CustomValue(string value)
        {
            _value = value;
        }

        public CustomValue()
        {
        }

        #region IXmlSerializable Members

        public XmlSchema GetSchema()
        {
            return null;
        }

        public void ReadXml(System.Xml.XmlReader reader)
        {
            _value = reader.ReadString();
        }

        public void WriteXml(System.Xml.XmlWriter writer)
        {
            writer.WriteString(_value);
        }

        #endregion
    }

===================================
This list is hosted by DevelopMentorR  http://www.develop.com

View archives and manage your subscription(s) at
http://discuss.develop.com

===================================
This list is hosted by DevelopMentorĀ®  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to