Beispiel #1
0
        private static Type[] GetSerializableTypes()
        {
            HashSet <Type> hashSet = new HashSet <Type>();

            try
            {
                foreach (Type type in DxBinarySerializationUtil.expectedTypes)
                {
                    DxBinarySerializationUtil.ExpandSerializableTypes(hashSet, type);
                }
            }
            catch (Exception ex)
            {
                DxBinarySerializationUtil.LogErr("SerializationTypeBinder initialize type in current appdomain failed: {0}.", new object[]
                {
                    ex.ToString()
                });
            }
            return(hashSet.ToArray <Type>());
        }
Beispiel #2
0
 private static void ExpandSerializableTypes(HashSet <Type> serializableTypes, Type type)
 {
     if (serializableTypes.Contains(type))
     {
         return;
     }
     serializableTypes.Add(type);
     try
     {
         if (type.IsArray)
         {
             DxBinarySerializationUtil.ExpandSerializableTypes(serializableTypes, type.GetElementType());
         }
     }
     catch (Exception ex)
     {
         DxBinarySerializationUtil.LogErr("SerializationTypeBinder load array element type on type {0} failed: {1}.", new object[]
         {
             type.FullName,
             ex.ToString()
         });
     }
     try
     {
         if (type.IsConstructedGenericType)
         {
             foreach (Type type2 in type.GetGenericArguments())
             {
                 DxBinarySerializationUtil.ExpandSerializableTypes(serializableTypes, type2);
             }
         }
     }
     catch (Exception ex2)
     {
         DxBinarySerializationUtil.LogErr("SerializationTypeBinder load generic type definition on type {0} failed: {1}.", new object[]
         {
             type.FullName,
             ex2.ToString()
         });
     }
     try
     {
         FieldInfo[] fields = type.GetFields(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
         if (fields != null && fields.Length > 0)
         {
             foreach (FieldInfo fieldInfo in from x in fields
                      where !x.IsNotSerialized && !serializableTypes.Contains(x.FieldType) && x.FieldType.IsSerializable
                      select x)
             {
                 try
                 {
                     DxBinarySerializationUtil.ExpandSerializableTypes(serializableTypes, fieldInfo.FieldType);
                 }
                 catch (Exception ex3)
                 {
                     DxBinarySerializationUtil.LogErr("SerializationTypeBinder load field {0} on type {1} failed: {2}.", new object[]
                     {
                         fieldInfo.Name,
                         type.FullName,
                         ex3.ToString()
                     });
                 }
             }
         }
     }
     catch (Exception ex4)
     {
         DxBinarySerializationUtil.LogErr("SerializationTypeBinder load fields on type {0} failed: {1}.", new object[]
         {
             type.FullName,
             ex4.ToString()
         });
     }
     try
     {
         PropertyInfo[] properties = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
         if (properties != null && properties.Length > 0)
         {
             foreach (PropertyInfo propertyInfo in properties)
             {
                 try
                 {
                     DxBinarySerializationUtil.ExpandSerializableTypes(serializableTypes, propertyInfo.PropertyType);
                 }
                 catch (Exception ex5)
                 {
                     DxBinarySerializationUtil.LogErr("SerializationTypeBinder load property {0} on type {1} failed: {2}.", new object[]
                     {
                         propertyInfo.Name,
                         type.FullName,
                         ex5.ToString()
                     });
                 }
             }
         }
     }
     catch (Exception ex6)
     {
         DxBinarySerializationUtil.LogErr("SerializationTypeBinder load properties on type {0} failed: {1}.", new object[]
         {
             type.FullName,
             ex6.ToString()
         });
     }
     try
     {
         if (type.BaseType != null && type.BaseType != typeof(object))
         {
             DxBinarySerializationUtil.ExpandSerializableTypes(serializableTypes, type.BaseType);
         }
     }
     catch (Exception ex7)
     {
         DxBinarySerializationUtil.LogErr("SerializationTypeBinder load base type on type {0} failed: {1}.", new object[]
         {
             type.FullName,
             ex7.ToString()
         });
     }
 }