private DataTable PopulateCollectionInfo(NameObjectCollectionBase coll) { DataTable dtData = InitDataTable(2); DataRow dr = null; int i = 0; System.Reflection.MemberInfo[] members = null; Array keys = null; object[] keysArray = null; Array values = null; object[] valuesArray = null; object valueItem = null; string thisValue = null; members = coll.GetType().FindMembers(System.Reflection.MemberTypes.Method, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance, Type.FilterName, "BaseGetAllValues"); if (members.Length == 0) { throw new ApplicationException("Unable to retrieve values from NameObjectCollectionBase"); } System.Reflection.MethodInfo mi = (System.Reflection.MethodInfo)members[0]; values = (Array)mi.Invoke(coll, null); valuesArray = (object[])values; members = coll.GetType().FindMembers(System.Reflection.MemberTypes.Method, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance, Type.FilterName, "BaseGetAllKeys"); if (members.Length == 0) { throw new ApplicationException("Unable to retrieve keys from NameObjectCollectionBase"); } mi = (System.Reflection.MethodInfo)members[0]; keys = (Array)mi.Invoke(coll, null); keysArray = (object[])keys; for (i = 0; i <= Information.UBound(keysArray); i++) { dr = dtData.NewRow(); dtData.Rows.Add(dr); dr["Name"] = GetObjectValue(keysArray[i]); if (valuesArray[i] is ArrayList) { foreach (object valueItem_loopVariable in (ArrayList)valuesArray[i]) { valueItem = valueItem_loopVariable; if (Strings.Len(thisValue) > 0) thisValue += ","; thisValue += GetObjectValue(valueItem); } } else if (valuesArray[i] is System.Web.HttpCookie) { thisValue = ((System.Web.HttpCookie)valuesArray[i]).Value; } else { thisValue = GetObjectValue(valuesArray[i]); } dr["Value"] = thisValue; } return dtData; }
private static void XmlSerializeNameObjects(XmlWriter writer, NameObjectCollectionBase obj, Type valueType) { Type objType = obj.GetType(); writer.WriteStartElement(GetCleanName(objType.Name)); bool writeValueType = (valueType == null) || valueType.Equals(Generic<object>.Type); if (!writeValueType) { writer.WriteAttributeString("valueType", GetTypeName(valueType)); } object[] values = objType.GetMethod("BaseGetAllValues", BindingFlags.NonPublic | BindingFlags.Instance, null, Type.EmptyTypes, null).Invoke(obj, null) as object[]; for (int i = 0; i < values.Length; i++) { writer.WriteStartElement("Item"); writer.WriteAttributeString("name", obj.Keys[i]); if (values[i] != null) { Type type = values[i].GetType(); if (!((!writeValueType && (type == valueType)) || IsKnownType(type))) { writer.WriteAttributeString("valueType", GetTypeName(type)); } } XmlWriterSerialize(writer, values[i], valueType); writer.WriteEndElement(); } writer.WriteEndElement(); }