Solved

Problems serializing class with float[,] property

Posted on 2008-06-14
1
946 Views
Last Modified: 2013-11-15
I am receiving a reflection error will serializing a class that is the body of MSMQ body. Messages is "There was an error reflecting type 'SSPW.ThermalMonitor.Interfaces.RawImage'." I have many other classes going out over the same queue without problems. The serialization error is occuring on the Pixels property is a 2D float array (float[,]). I have verified this by adding the XmlIgnoreAttribute()] to the Pixels property. In this case the message is serialized and sent successfully.

What do i have to do to serialize a simple typed 2D array? My message body class in given below.


using System;
using System.Xml.Serialization;
 
namespace SSPW.ThermalMonitor.Interfaces
{
    [Serializable]
    public class RawImage
    {
        protected string _handle;
        protected int _width;
        protected int _height;
        protected float[,] _pixels;
        protected DateTime _timestamp;
        
        public RawImage()
        {
            _handle = "";
            _width = 320;
            _height = 240;
            _pixels = new float [_width,_height];
            _timestamp = DateTime.Now;
        }
 
        public String Handle
        {
            get
            {
                return _handle;
            }
            set
            {
                _handle = value;
            }
        }
 
        public int Width
        {
            get
            {
                return _width;
            }
            set
            {
                _width = value;
            }
        }
 
        public int Height
        {
            get
            {
                return _height;
            }
            set
            {
                _height = value;
            }
        }
 
        //[XmlIgnoreAttribute()]
        public float[,] Pixels
        {
            get
            {
                return _pixels;
            }
            set
            {
                _pixels = value;
            }
        }
 
        public DateTime Timestamp
        {
            get
            {
                return _timestamp;
            }
            set
            {
                _timestamp = value;
            }
        }
 
    }
}

Open in new window

0
Comment
Question by:cravenjw
1 Comment
 
LVL 1

Accepted Solution

by:
gregmulvihill earned 250 total points
ID: 21787410
Give this a try.
using System;
using System.Xml.Serialization;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
 
namespace SSPW.ThermalMonitor.Interfaces
{
	[Serializable]
	public class RawImage
	{
		protected string _handle;
		protected int _width;
		protected int _height;
		protected float[,] _pixels;
		protected DateTime _timestamp;
 
		public RawImage()
		{
			_handle = "";
			_width = 320;
			_height = 240;
			_pixels = new float[_width, _height];
			_timestamp = DateTime.Now;
		}
 
		public String Handle
		{
			get { return _handle; }
			set { _handle = value; }
		}
 
		public int Width
		{
			get { return _width; }
			set { _width = value; }
		}
 
		public int Height
		{
			get { return _height; }
			set { _height = value; }
		}
 
		[XmlIgnoreAttribute()]
		public float[,] Pixels
		{
			get { return _pixels; }
			set { _pixels = value; }
		}
 
		[XmlElementAttribute("Pixels")]
		public byte[] PixelsByteArray
		{
			get
			{
				if (_pixels != null)
				{
					MemoryStream oMemoryStream = new MemoryStream();
 
					BinaryFormatter oBinaryFormatter = new BinaryFormatter();
					oBinaryFormatter.Serialize(oMemoryStream, _pixels);
 
					byte[] oBytes = oMemoryStream.ToArray();
 
					oMemoryStream.Close();
					oMemoryStream.Dispose();
 
					return oBytes;
				}
				else
				{
					return null;
				}
			}
 
			set
			{
				if (value != null)
				{
					MemoryStream oMemoryStream = new MemoryStream(value);
 
					BinaryFormatter oBinaryFormatter = new BinaryFormatter();
					_pixels = oBinaryFormatter.Deserialize(oMemoryStream) as float[,];
 
					oMemoryStream.Close();
					oMemoryStream.Dispose();
				}
				else
				{
					_pixels = null;
				}
			}
		}
 
		public DateTime Timestamp
		{
			get { return _timestamp; }
			set { _timestamp = value; }
		}
	}
}

Open in new window

0

Featured Post

DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I use more than 1 computer in my office for various reasons. Multiple keyboards and mice take up more than just extra space, they make working a little more complicated. Using one mouse and keyboard for all of my computers makes life easier. This co…
Skype is a P2P (Peer to Peer) instant messaging and VOIP (Voice over IP) service – as well as a whole lot more.
This video shows how use content aware, what it’s used for, and when to use it over other tools.
XMind Plus helps organize all details/aspects of any project from large to small in an orderly and concise manner. If you are working on a complex project, use this micro tutorial to show you how to make a basic flow chart. The software is free when…

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question