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 DevelopMentorĀ®  http://www.develop.com

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

Reply via email to