IDL Complex Type
struct The CORBA struct is represented by a .NET class type that has the [Serializable] attribute for .Net serializing/deserializing.  The class members in C# class type must be declarerd in the same order as the corresponding CORBA data elements defined in IDL.  Each CORBA structs maps to two C#'s classes as follow.
// CORBA IDL 
module demo
{
   module _any
   {
      struct Node 
      {
         string name;
         sequence<Node> next;
      };
   };
};
// C# classes

e.g.
Node
NodeHelper
// C# 
[Serializable]
public sealed class Node : Org.Omg.CORBA.Portable.IDLEntity
{
   /**
    * Struct member name
    */
   public string name;

   /**
    * Default constructor
    */
    public Node()
    { }

    /**
    * Constructor with fields initialization
    * @param name name struct member
    * @param next next struct member
    */
    public Node(string name)
    {
       this.name = name;
    }
}
	
public class NodeHelper
{
   ///
   /// Insert Node into an any
   /// @param a an any
   /// @param t Node value
   ///
   public static void Insert(Org.Omg.CORBA.Any a, demo.any.Node t )
   {
      a.Type(Type());
      Write(a.Create_Output_Stream(),t);
   }

   ///
   /// Extract Node from an any
   /// @param a an any
   /// @return the extracted Node value
   ///
   public static demo.any.Node Extract(Org.Omg.CORBA.Any a)
   {
      if (!a.Type().Equal(Type()))
         throw new Org.Omg.CORBA.MARSHAL();
      return Read(a.Create_Input_Stream());
   }

   ///
   /// Internal TypeCode value
   ///
   private static Org.Omg.CORBA.TypeCode _tc = null;
   private static bool _working = false;

   ///
   /// Return the Node TypeCode
   /// @return a TypeCode
   ///
   public static Org.Omg.CORBA.TypeCode Type()
   {
      if (_tc == null)
      {
         lock (typeof(Org.Omg.CORBA.TypeCode))
         {
            if (_tc != null)
               return _tc;
            if (_working)
               return Org.Omg.CORBA.ORB.Init().Create_Recursive_TC(Id());
            _working = true;
            Org.Omg.CORBA.ORB orb = Org.Omg.CORBA.ORB.Init();
            Org.Omg.CORBA.StructMember[] _members = new Org.Omg.CORBA.StructMember[2];

            _members[0] = new Org.Omg.CORBA.StructMember();
            _members[0].name = "name";
            _members[0].type = orb.Get_Primitive_TC(Org.Omg.CORBA.TCKind.tk_string);
            _members[1] = new Org.Omg.CORBA.StructMember();
            _members[1].name = "next";
            _members[1].type = orb.Create_Sequence_TC(0,demo.any.NodeHelper.Type());
            _tc = orb.Create_Struct_TC(Id(),"Node",_members);
            _working = false;
         }
      } 
      return _tc; 
   }

   ///
   /// Return the Node IDL ID 
   /// @return an ID 
   ///
   public static string Id() 
   { 
      return _id;
   } 
   
   private static string _id =   "IDL:demo/any/Node:1.0";
   
   ///
   /// Read Node from  a marshalled stream 
   /// @param  istream the input stream 
   /// @return the readed Node value 
   ///	
   public static demo.any.Node Read(Org.Omg.CORBA.Portable.InputStream istream)
   {
      demo.any.Node new_one = new demo.any.Node(); 
      new_one.name = istream.Read_String();
      {
	     int size2 = (int)  istream.Read_ULong();
		 demo.any.Node[] tmp = new  demo.any.Node[size2];
		 for  (int i2 = 0;i2<tmp.Length;i2++)   
		 {
		 	tmp[i2] = demo.any.NodeHelper.Read(istream);
		 } 
	  	 new_one.next =  tmp; 
      }
      return  new_one; 
   }
					
   ///
   /// Write  Node into  a marshalled stream  
   /// @param ostream  the output  stream 
   /// @param value  Node  value 
   ///
   public static void Write(
		Org.Omg.CORBA.Portable.OutputStream ostream, demo.any.Node value)
   { 
      ostream.Write_String(value.name); ostream.Write_ULong((uint) value.next.Length);
      for (int i2 = 0;i2 < value.next.Length; i2)
      {
         demo.any.NodeHelper.Writeostreamvalue.nexti2;
      }
   }

}