public CompositeDataType_Type(CompositeType value)
     : base(value)
 {
     List<CompositeDataField> fields = new List<CompositeDataField>();
      foreach (string fieldName in value.KeySet)
      {
     fields.Add(new CompositeDataField(fieldName, value.GetDescription(fieldName), Serialize(value.GetOpenType(fieldName))));
      }
      CompositeDataField = fields.ToArray();
 }
        private static CompositeType MakeRowType(CompositeType elementType)
        {
            List<string> names = new List<string>();
             List<string> descriptions = new List<string>();
             List<OpenType> types = new List<OpenType>();

             names.Add(CollectionIndexColumnName);
             descriptions.Add("Index of a collection");
             types.Add(SimpleType.Integer);

             foreach (string itemName in elementType.KeySet)
             {
            names.Add(itemName);
            descriptions.Add(elementType.GetDescription(itemName));
            types.Add(elementType.GetOpenType(itemName));
             }
             return new CompositeType(elementType.TypeName, elementType.Description, names, descriptions, types);
        }
        private static CompositeType MakeElementType(CompositeType rowType)
        {
            List<string> names = new List<string>();
             List<string> descriptions = new List<string>();
             List<OpenType> types = new List<OpenType>();

             foreach (string itemName in rowType.KeySet)
             {
            if (itemName != CollectionIndexColumnName)
            {
               names.Add(itemName);
               descriptions.Add(rowType.GetDescription(itemName));
               types.Add(rowType.GetOpenType(itemName));
            }
             }
             return new CompositeType(rowType.TypeName, rowType.Description, names, descriptions, types);
        }