/// <summary>
        /// Serializes an object that implements INGRIDSerializable and returns serialized byte array.
        /// </summary>
        /// <param name="serializableObject">Object to serialize</param>
        /// <returns>Serialized object as byte array</returns>
        public static byte[] SerializeToByteArray(INGRIDSerializable serializableObject)
        {
            var stream = new MemoryStream();

            new NGRIDDefaultSerializer(stream).WriteObject(serializableObject);
            return(stream.ToArray());
        }
        /// <summary>
        /// Serializes an object that implements INGRIDSerializable interface.
        /// Object may be null.
        /// </summary>
        /// <param name="serializableObject">object to serialize</param>
        public void WriteObject(INGRIDSerializable serializableObject)
        {
            if (serializableObject == null)
            {
                _stream.WriteByte(0);
                return;
            }

            _stream.WriteByte(1);
            serializableObject.Serialize(this);
        }
 /// <summary>
 /// Serializes an array that all items implements INGRIDSerializable interface.
 /// Object array may be null or empty.
 /// </summary>
 /// <param name="serializableObjects">objects to serialize</param>
 public void WriteObjectArray(INGRIDSerializable[] serializableObjects)
 {
     if (serializableObjects == null)
     {
         WriteInt32(-1);
     }
     else
     {
         WriteInt32(serializableObjects.Length);
         for (var i = 0; i < serializableObjects.Length; i++)
         {
             WriteObject(serializableObjects[i]);
         }
     }
 }
        /// <summary>
        /// Serializes an object that implements INGRIDSerializable interface.
        /// Object may be null.
        /// </summary>
        /// <param name="serializableObject">object to serialize</param>
        public void WriteObject(INGRIDSerializable serializableObject)
        {
            if (serializableObject == null)
            {
                _stream.WriteByte(0);
                return;
            }

            _stream.WriteByte(1);
            serializableObject.Serialize(this);
        }
 /// <summary>
 /// Serializes an object that implements INGRIDSerializable to a Stream.
 /// </summary>
 /// <param name="stream">Stream to write serialized object</param>
 /// <param name="serializableObject">Object to serialize</param>
 public static void SerializeToStream(Stream stream, INGRIDSerializable serializableObject)
 {
     new NGRIDDefaultSerializer(stream).WriteObject(serializableObject);
 }