public static int GetObjectSize(Type type, object instance)
 {
     try
     {
         return(RawSerializer.GetFieldSize(type, null, instance));
     }
     catch (Exception value)
     {
         Console.WriteLine(value);
     }
     return(-1);
 }
        private static int GetFieldSize(Type type, FieldInfo ownerFieldInfo, object instance)
        {
            int num = 0;

            if (type.IsPrimitive)
            {
                if (!RawSerializer.TryGetPrimitiveSize(type, out num))
                {
                    throw new UnknownLengthException(ownerFieldInfo);
                }
            }
            else if (type == typeof(string))
            {
                if (instance == null)
                {
                    throw new UnknownLengthException(ownerFieldInfo);
                }
                num += 2;
                num += (instance as string).Length * 2;
            }
            else
            {
                FieldInfo[] fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
                FieldInfo[] array  = fields;
                for (int i = 0; i < array.Length; i++)
                {
                    FieldInfo fieldInfo = array[i];
                    if (!RawSerializer.IsIngoreField(fieldInfo))
                    {
                        Type            fieldType       = fieldInfo.FieldType;
                        LengthAttribute lengthAttribute = Attribute.GetCustomAttribute(fieldInfo, typeof(LengthAttribute)) as LengthAttribute;
                        if (fieldType.IsArray)
                        {
                            if (lengthAttribute != null)
                            {
                                num += lengthAttribute.Length * RawSerializer.GetFieldSize(fieldType.GetElementType(), fieldInfo, instance);
                            }
                            else
                            {
                                if (instance == null)
                                {
                                    throw new UnknownLengthException(fieldInfo);
                                }
                                int   fieldSize = RawSerializer.GetFieldSize(fieldType.GetElementType(), fieldInfo, instance);
                                Array array2    = fieldInfo.GetValue(instance) as Array;
                                num += 2;
                                num += array2.Length * fieldSize;
                            }
                        }
                        else if (lengthAttribute != null && fieldType == typeof(string))
                        {
                            num += lengthAttribute.Length * 2;
                        }
                        else
                        {
                            num += RawSerializer.GetFieldSize(fieldType, fieldInfo, instance);
                        }
                    }
                }
            }
            return(num);
        }