[Mono-devel-list] Regression in Soap serialization

Kamil Skalski kamil.skalski at gmail.com
Mon Aug 1 07:18:40 EDT 2005


This patch http://lists.ximian.com/pipermail/mono-patches/2005-July/061773.html
caused regression in serialization example from

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemnonserializedattributeclasstopic.asp

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;
//using System.Runtime.Serialization.Formatters.Binary;

public class Test {
   public static void Main()  {

      //Creates a new TestSimpleObject object.
      TestSimpleObject obj = new TestSimpleObject();

      Console.WriteLine("Before serialization the object contains: ");
      obj.Print();

      //Opens a file and serializes the object into it in binary format.
      Stream stream = File.Open("data.xml", FileMode.Create);
      SoapFormatter formatter = new SoapFormatter();

      //BinaryFormatter formatter = new BinaryFormatter();

      formatter.Serialize(stream, obj);
      stream.Close();
   
      //Empties obj.
      obj = null;
   
      //Opens file "data.xml" and deserializes the object from it.
      stream = File.Open("data.xml", FileMode.Open);
      formatter = new SoapFormatter();

      //formatter = new BinaryFormatter();

      obj = (TestSimpleObject)formatter.Deserialize(stream);
      stream.Close();

      Console.WriteLine("");
      Console.WriteLine("After deserialization the object contains: ");
      obj.Print();
   }
}


// A test object that needs to be serialized.
[Serializable()]        
public class TestSimpleObject  {

    public int member1;
    public string member2;
    public string member3;
    public double member4;
    
    // A field that is not serialized.
    [NonSerialized()] public string member5; 
    
    public TestSimpleObject() {

        member1 = 11;
        member2 = "hello";
        member3 = "hello";
        member4 = 3.14159265;
        member5 = "hello world!";
    }


    public void Print() {

        Console.WriteLine("member1 = '{0}'", member1);
        Console.WriteLine("member2 = '{0}'", member2);
        Console.WriteLine("member3 = '{0}'", member3);
        Console.WriteLine("member4 = '{0}'", member4);
        Console.WriteLine("member5 = '{0}'", member5);
    }
}


gives exception

Unhandled Exception: System.TypeInitializationException: An exception
was thrown by the type initializer for
System.Runtime.Serialization.Formatters.Soap.SoapTypeMapper --->
System.ArgumentException: Key duplication when adding:
nonPositiveInteger http://www.w3.org/2001/XMLSchema
in <0x001d0> System.Collections.Hashtable:PutImpl (System.Object key,
System.Object value, Boolean overwrite)
in <0x00012> System.Collections.Hashtable:Add (System.Object key,
System.Object value)
in <0x00064> System.Runtime.Serialization.Formatters.Soap.SoapTypeMapper:RegisterType
(System.Type type, System.String name, System.String namspace, Boolean
reverseMap)
in <0x00060> System.Runtime.Serialization.Formatters.Soap.SoapTypeMapper:RegisterType
(System.Type type)
in <0x002e9> System.Runtime.Serialization.Formatters.Soap.SoapTypeMapper:InitMappingTables
()
in <0x0011b> System.Runtime.Serialization.Formatters.Soap.SoapTypeMapper:.cctor
()--- End of inner exception stack trace ---

in <0x00000> <unknown method>
in <0x000c5> System.Runtime.Serialization.Formatters.Soap.SoapFormatter:Serialize
(System.IO.Stream serializationStream, System.Objectgraph,
System.Runtime.Remoting.Messaging.Header[] headers)
in <0x00015> System.Runtime.Serialization.Formatters.Soap.SoapFormatter:Serialize
(System.IO.Stream serializationStream, System.Objectgraph)
in <0x00071> Test:Main ()

-- 
Kamil Skalski
http://nazgul.omega.pl



More information about the Mono-devel-list mailing list