コード例 #1
0
 protected virtual void SerializeCollection(object objectToSerialize, string elementName, BinaryWriter writer)
 {
     if (objectToSerialize is ICollection)
     {
         writer.Write(SerializerBase.GetStringHashCode(elementName));
         long num = writer.Seek(0, SeekOrigin.Current);
         foreach (object item in (ICollection)objectToSerialize)
         {
             this.SerializeObject(item, objectToSerialize, base.GetObjectName(item), writer);
         }
         if (writer.Seek(0, SeekOrigin.Current) == num)
         {
             writer.Seek(-2, SeekOrigin.Current);
             writer.Write((short)0);
             writer.Seek(-2, SeekOrigin.Current);
         }
         else
         {
             writer.Write((short)0);
         }
     }
 }
コード例 #2
0
        private PropertyInfo ReadPropertyInfo(object objectToDeserialize, object parent, PropertyInfo[] properties, BinaryReader reader)
        {
            short num = base.ReadHashID(reader, false);

            if (num == 0)
            {
                return(null);
            }
            int          num2 = 0;
            PropertyInfo result;

            while (true)
            {
                if (num2 < properties.Length)
                {
                    PropertyInfo propertyInfo = properties[num2];
                    if (!base.IsChartBaseProperty(objectToDeserialize, parent, propertyInfo))
                    {
                        if (propertyInfo.CanRead && propertyInfo.PropertyType.GetInterface("ICollection", true) != null)
                        {
                            if (SerializerBase.GetStringHashCode(propertyInfo.Name) == num)
                            {
                                result = propertyInfo;
                                break;
                            }
                        }
                        else if (propertyInfo.CanRead && propertyInfo.CanWrite && !(propertyInfo.Name == "Item") && SerializerBase.GetStringHashCode(propertyInfo.Name) == num)
                        {
                            return(propertyInfo);
                        }
                    }
                    num2++;
                    continue;
                }
                throw new InvalidOperationException(SR.ExceptionChartSerializerPropertyNotFound);
            }
            return(result);
        }
コード例 #3
0
 protected virtual void SerializeObject(object objectToSerialize, object parent, string elementName, BinaryWriter writer)
 {
     if (objectToSerialize != null)
     {
         if (parent != null)
         {
             PropertyDescriptor propertyDescriptor = TypeDescriptor.GetProperties(parent)[elementName];
             if (propertyDescriptor != null)
             {
                 SerializationVisibilityAttribute serializationVisibilityAttribute = (SerializationVisibilityAttribute)propertyDescriptor.Attributes[typeof(SerializationVisibilityAttribute)];
                 if (serializationVisibilityAttribute != null && serializationVisibilityAttribute.Visibility == SerializationVisibility.Hidden)
                 {
                     return;
                 }
             }
         }
         if (objectToSerialize is ICollection)
         {
             this.SerializeCollection(objectToSerialize, elementName, writer);
         }
         else
         {
             writer.Write(SerializerBase.GetStringHashCode(elementName));
             long           num        = writer.Seek(0, SeekOrigin.Current);
             ArrayList      arrayList  = new ArrayList();
             PropertyInfo[] properties = objectToSerialize.GetType().GetProperties();
             if (properties != null)
             {
                 PropertyInfo[] array = properties;
                 foreach (PropertyInfo propertyInfo in array)
                 {
                     if (!base.IsChartBaseProperty(objectToSerialize, parent, propertyInfo))
                     {
                         if (propertyInfo.CanRead && propertyInfo.PropertyType.GetInterface("ICollection", true) != null && !base.SerializeICollAsAtribute(propertyInfo, objectToSerialize))
                         {
                             bool flag = base.IsSerializableContent(propertyInfo.Name, objectToSerialize);
                             if (flag && objectToSerialize != null)
                             {
                                 PropertyDescriptor propertyDescriptor2 = TypeDescriptor.GetProperties(objectToSerialize)[propertyInfo.Name];
                                 if (propertyDescriptor2 != null)
                                 {
                                     SerializationVisibilityAttribute serializationVisibilityAttribute2 = (SerializationVisibilityAttribute)propertyDescriptor2.Attributes[typeof(SerializationVisibilityAttribute)];
                                     if (serializationVisibilityAttribute2 != null && serializationVisibilityAttribute2.Visibility == SerializationVisibility.Hidden)
                                     {
                                         flag = false;
                                     }
                                 }
                             }
                             MethodInfo method = objectToSerialize.GetType().GetMethod("ShouldSerialize" + propertyInfo.Name);
                             if (flag && method != null)
                             {
                                 object obj = method.Invoke(objectToSerialize, null);
                                 if (obj is bool && !(bool)obj)
                                 {
                                     flag = false;
                                 }
                             }
                             if (flag)
                             {
                                 arrayList.Add(propertyInfo.Name);
                                 this.SerializeCollection(propertyInfo.GetValue(objectToSerialize, null), propertyInfo.Name, writer);
                             }
                         }
                         else if (propertyInfo.CanRead && propertyInfo.CanWrite && !(propertyInfo.Name == "Item"))
                         {
                             bool       flag2   = true;
                             MethodInfo method2 = objectToSerialize.GetType().GetMethod("ShouldSerialize" + propertyInfo.Name);
                             if (method2 != null)
                             {
                                 object obj2 = method2.Invoke(objectToSerialize, null);
                                 if (obj2 is bool && !(bool)obj2)
                                 {
                                     flag2 = false;
                                 }
                             }
                             if (flag2)
                             {
                                 if (base.ShouldSerializeAsAttribute(propertyInfo, objectToSerialize))
                                 {
                                     if (base.IsSerializableContent(propertyInfo.Name, objectToSerialize))
                                     {
                                         this.SerializeProperty(propertyInfo.GetValue(objectToSerialize, null), objectToSerialize, propertyInfo.Name, writer);
                                     }
                                 }
                                 else
                                 {
                                     this.SerializeObject(propertyInfo.GetValue(objectToSerialize, null), objectToSerialize, propertyInfo.Name, writer);
                                 }
                             }
                             arrayList.Add(propertyInfo.Name);
                         }
                     }
                 }
                 this.CheckPropertiesID(arrayList);
             }
             if (writer.Seek(0, SeekOrigin.Current) == num)
             {
                 writer.Seek(-2, SeekOrigin.Current);
                 writer.Write((short)0);
                 writer.Seek(-2, SeekOrigin.Current);
             }
             else
             {
                 writer.Write((short)0);
             }
         }
     }
 }
コード例 #4
0
        protected virtual int DeserializeObject(object objectToDeserialize, object parent, string elementName, BinaryReader reader)
        {
            int num = 0;

            if (objectToDeserialize == null)
            {
                return(num);
            }
            Type[] array = null;
            int    num2  = 0;

            if (objectToDeserialize is IList)
            {
                short num3 = 0;
                while ((num3 = base.ReadHashID(reader, true)) != 0)
                {
                    string       itemTypeName = string.Empty;
                    PropertyInfo property     = objectToDeserialize.GetType().GetProperty("Item");
                    if (property != null)
                    {
                        Assembly assembly = property.PropertyType.Assembly;
                        if (assembly != null)
                        {
                            if (array == null)
                            {
                                array = assembly.GetExportedTypes();
                            }
                            Type[] array2 = array;
                            foreach (Type type in array2)
                            {
                                if (type.IsSubclassOf(property.PropertyType) && SerializerBase.GetStringHashCode(type.Name) == num3)
                                {
                                    itemTypeName = type.Name;
                                }
                            }
                        }
                    }
                    string text        = null;
                    bool   flag        = false;
                    object listNewItem = base.GetListNewItem((IList)objectToDeserialize, itemTypeName, ref text, ref flag);
                    long   offset      = reader.BaseStream.Seek(0L, SeekOrigin.Current);
                    int    num4        = this.DeserializeObject(listNewItem, objectToDeserialize, "", reader);
                    if (num4 > 0 || flag)
                    {
                        bool         flag2     = true;
                        PropertyInfo property2 = listNewItem.GetType().GetProperty("Name");
                        if (property2 != null)
                        {
                            object obj = null;
                            try
                            {
                                text = (string)property2.GetValue(listNewItem, null);
                                if (text != null && text.Length > 0)
                                {
                                    bool flag3 = false;
                                    obj = base.GetListNewItem((IList)objectToDeserialize, itemTypeName, ref text, ref flag3);
                                    if (text == null)
                                    {
                                        obj = null;
                                    }
                                }
                            }
                            catch (Exception)
                            {
                            }
                            if (obj != null)
                            {
                                flag2 = false;
                                reader.BaseStream.Seek(offset, SeekOrigin.Begin);
                                num4 = this.DeserializeObject(obj, objectToDeserialize, "", reader);
                                ((IList)objectToDeserialize).Remove(obj);
                                ((IList)objectToDeserialize).Insert(num2++, obj);
                            }
                        }
                        if (flag2)
                        {
                            ((IList)objectToDeserialize).Insert(num2++, listNewItem);
                        }
                    }
                    num += num4;
                }
                return(num);
            }
            PropertyInfo[] properties = objectToDeserialize.GetType().GetProperties();
            if (properties == null)
            {
                return(num);
            }
            PropertyInfo propertyInfo = null;

            while ((propertyInfo = this.ReadPropertyInfo(objectToDeserialize, parent, properties, reader)) != null)
            {
                if (base.ShouldSerializeAsAttribute(propertyInfo, objectToDeserialize))
                {
                    if (this.SetPropertyValue(objectToDeserialize, propertyInfo, reader))
                    {
                        num++;
                    }
                }
                else
                {
                    PropertyDescriptor propertyDescriptor = TypeDescriptor.GetProperties(objectToDeserialize)[propertyInfo.Name];
                    if (propertyDescriptor != null)
                    {
                        object value = propertyDescriptor.GetValue(objectToDeserialize);
                        num += this.DeserializeObject(value, objectToDeserialize, propertyInfo.Name, reader);
                    }
                    else if (!base.IgnoreUnknownAttributes)
                    {
                        throw new InvalidOperationException(SR.ExceptionChartSerializerPropertyNameUnknown(propertyInfo.Name, objectToDeserialize.GetType().ToString()));
                    }
                }
            }
            return(num);
        }
コード例 #5
0
 protected void WritePropertyValue(object obj, object parent, string elementName, BinaryWriter writer)
 {
     writer.Write(SerializerBase.GetStringHashCode(elementName));
     if (obj is bool)
     {
         writer.Write((bool)obj);
         return;
     }
     if (obj is double)
     {
         writer.Write((double)obj);
         return;
     }
     if (obj is string)
     {
         writer.Write((string)obj);
         return;
     }
     if (obj is int)
     {
         writer.Write((int)obj);
         return;
     }
     if (obj is long)
     {
         writer.Write((long)obj);
         return;
     }
     if (obj is float)
     {
         writer.Write((float)obj);
         return;
     }
     if (obj.GetType().IsEnum)
     {
         string value = ((Enum)obj).ToString();
         writer.Write(value);
         return;
     }
     if (obj is byte)
     {
         writer.Write((byte)obj);
         return;
     }
     if (obj is Font)
     {
         writer.Write(SerializerBase.FontToString((Font)obj));
         return;
     }
     if (obj is Color)
     {
         writer.Write(((Color)obj).ToArgb());
         return;
     }
     if (obj is DateTime)
     {
         writer.Write(((DateTime)obj).Ticks);
         return;
     }
     if (obj is Size)
     {
         writer.Write(((Size)obj).Width);
         writer.Write(((Size)obj).Height);
         return;
     }
     if (obj is double[])
     {
         double[] array = (double[])obj;
         writer.Write(array.Length);
         double[] array2 = array;
         foreach (double value2 in array2)
         {
             writer.Write(value2);
         }
         return;
     }
     if (obj is Color[])
     {
         Color[] array3 = (Color[])obj;
         writer.Write(array3.Length);
         Color[] array4 = array3;
         for (int j = 0; j < array4.Length; j++)
         {
             Color color = array4[j];
             writer.Write(color.ToArgb());
         }
         return;
     }
     if (obj is Image)
     {
         MemoryStream memoryStream = new MemoryStream();
         ((Image)obj).Save(memoryStream, ((Image)obj).RawFormat);
         int value3 = (int)memoryStream.Seek(0L, SeekOrigin.End);
         memoryStream.Seek(0L, SeekOrigin.Begin);
         writer.Write(value3);
         writer.Write(memoryStream.ToArray());
         memoryStream.Close();
         return;
     }
     if (obj is Margins)
     {
         writer.Write(((Margins)obj).Top);
         writer.Write(((Margins)obj).Bottom);
         writer.Write(((Margins)obj).Left);
         writer.Write(((Margins)obj).Right);
         return;
     }
     throw new InvalidOperationException(SR.ExceptionChartSerializerBinaryTypeUnsupported(obj.GetType().ToString()));
 }