internal string XsdTypeName(Type type, SoapAttributes a, string name) {
string typeName = name;
if (a.SoapType != null && a.SoapType.TypeName.Length > 0)
typeName = a.SoapType.TypeName;
if (type.IsGenericType && typeName.IndexOf('{') >= 0) {
Type genType = type.GetGenericTypeDefinition();
Type[] names = genType.GetGenericArguments();
Type[] types = type.GetGenericArguments();
for (int i = 0; i < names.Length; i++) {
string argument = "{" + names[i] + "}";
if (typeName.Contains(argument)) {
typeName = typeName.Replace(argument, XsdTypeName(types[i]));
if (typeName.IndexOf('{') < 0) {
break;
}
}
}
}
return typeName;
}
}