private static String ProcessArray(Type type, XMLNamespace xns) { Util.Log("RealSchemaType.ProcessArray Enter "+type); String qname = null; bool bbinary = false; Type elementType = type.GetElementType(); String elementTypeName = "ArrayOf"; while (elementType.IsArray) { elementTypeName = elementTypeName+"ArrayOf"; elementType = elementType.GetElementType(); } qname = RealSchemaType.TypeName(elementType, true, xns); int index = qname.IndexOf(":"); String prefix = qname.Substring(0, index); String wireName = qname.Substring(index+1); Util.Log("RealSchemaType.ProcessArray qname "+qname+" wirename "+wireName); int rank = type.GetArrayRank(); String rankStr = ""; if (rank > 1) rankStr = rank.ToString(CultureInfo.InvariantCulture); String csname =elementTypeName+wireName.Substring(0,1).ToUpper(CultureInfo.InvariantCulture)+wireName.Substring(1)+rankStr; csname = csname.Replace('+','N'); // need to get rid of + in nested classes ArraySchemaType ast = xns.LookupArraySchemaType(csname); if (ast == null) { ArraySchemaType cstype = new ArraySchemaType(type, csname, SchemaBlockType.ComplexContent, false); Restriction restriction = new Restriction(); SchemaAttribute attribute = new SchemaAttribute(); if (bbinary) attribute.AddArray(qname); else { String arrayTypeName = type.Name; index = arrayTypeName.IndexOf("["); attribute.AddArray(qname+arrayTypeName.Substring(index)); } restriction.AddArray(attribute); cstype.AddParticle(restriction); xns.AddArraySchemaType(cstype); } String returnStr = xns.Prefix+":"+csname; Util.Log("RealSchemaType.ProcessArray Exit "+returnStr); return returnStr; }