XmlBinaryContainer TypeConverter. Converts the XmlBinaryContainer to or from byte[] and Streams.
Inheritance: System.ComponentModel.TypeConverter
Ejemplo n.º 1
0
        /// <summary>
        /// Serializes binary data to a XmlNode.
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="ctorParamType"></param>
        /// <param name="parent"></param>
        protected void SerializeBinaryObject(Object obj, Type ctorParamType, XmlNode parent)
        {
            XmlElement proplist = null;
            String     val      = null;

            try
            {
                // If the objact is a Stream or can be converted to a byte[]...
                TypeConverter tc = TypeDescriptor.GetConverter(obj.GetType());
                if (tc.CanConvertTo(typeof(byte[])) || typeof(Stream).IsAssignableFrom(obj.GetType()))
                {
                    byte[] barr = null;

                    // Convert to byte[]
                    if (typeof(Stream).IsAssignableFrom(obj.GetType()))
                    {
                        // Convert a Stream to byte[]
                        var bctc = new BinaryContainerTypeConverter();
                        barr = bctc.ConvertStreamToByteArray((Stream)obj);
                    }
                    else
                    {
                        // Convert the object to a byte[]
                        barr = (byte[])tc.ConvertTo(obj, typeof(byte[]));
                    }

                    // Create a constructor node
                    proplist = parent.OwnerDocument.CreateElement(taglib.CONSTRUCTOR_TAG);
                    parent.AppendChild(proplist);

                    // Set info about the constructor type as attributes
                    SetObjectInfoAttributes("0", ctorParamType, proplist);

                    // Create a node for the binary data
                    XmlNode bindata = proplist.OwnerDocument.CreateElement(taglib.BINARY_DATA_TAG);
                    proplist.AppendChild(bindata);

                    // Set info about the binary data type as attributes (currently it's always byte[])
                    SetObjectInfoAttributes("0", typeof(byte[]), bindata);

                    // Convert the byte array to a string so it's easy to store it in XML
                    val = Convert.ToBase64String(barr, 0, barr.Length);

                    bindata.InnerText = val;
                }
            }
            catch (Exception exc)
            {
                if (!IgnoreSerialisationErrors)
                {
                    throw exc;
                }
            }
        }
		/// <summary>
		///     Serializes binary data to a XmlNode.
		/// </summary>
		/// <param name="obj"></param>
		/// <param name="ctorParamType"></param>
		/// <param name="parent"></param>
		protected void SerializeBinaryObject(Object obj, Type ctorParamType, XmlNode parent)
		{
			XmlElement proplist = null;
			String val = null;

			try
			{
				// If the objact is a Stream or can be converted to a byte[]...
				TypeConverter tc = TypeDescriptor.GetConverter(obj.GetType());
				if (tc.CanConvertTo(typeof(byte[])) || typeof(Stream).IsAssignableFrom(obj.GetType()))
				{
					byte[] barr = null;

					// Convert to byte[]
					if (typeof(Stream).IsAssignableFrom(obj.GetType()))
					{
						// Convert a Stream to byte[]
						var bctc = new BinaryContainerTypeConverter();
						barr = bctc.ConvertStreamToByteArray((Stream) obj);
					}
					else
					{
						// Convert the object to a byte[]
						barr = (byte[]) tc.ConvertTo(obj, typeof(byte[]));
					}

					// Create a constructor node
					proplist = parent.OwnerDocument.CreateElement(taglib.CONSTRUCTOR_TAG);
					parent.AppendChild(proplist);

					// Set info about the constructor type as attributes  
					SetObjectInfoAttributes("0", ctorParamType, proplist);

					// Create a node for the binary data
					XmlNode bindata = proplist.OwnerDocument.CreateElement(taglib.BINARY_DATA_TAG);
					proplist.AppendChild(bindata);

					// Set info about the binary data type as attributes (currently it's always byte[]) 
					SetObjectInfoAttributes("0", typeof(byte[]), bindata);

					// Convert the byte array to a string so it's easy to store it in XML
					val = Convert.ToBase64String(barr, 0, barr.Length);

					bindata.InnerText = val;
				}
			}
			catch (Exception exc)
			{
				if (!IgnoreSerialisationErrors)
				{
					throw exc;
				}
			}
		}
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="data"></param>
 public BinaryContainer(Stream data)
 {
   BinaryContainerTypeConverter conv = new BinaryContainerTypeConverter();
   this.data = conv.ConvertStreamToByteArray(data);
 }
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="data"></param>
        public BinaryContainer(Stream data)
        {
            BinaryContainerTypeConverter conv = new BinaryContainerTypeConverter();

            this.data = conv.ConvertStreamToByteArray(data);
        }