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;
        }
Esempio n. 2
0
 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();
 }