Solved

Problems serializing class with float[,] property

Posted on 2008-06-14
1
945 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

Let’s list some of the technologies that enable smooth teleworking. 
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
The viewer will learn common shortcuts with easy ways to remember them. The viewer will then learn where to find all of the keyboard shortcuts, how to create/change them, and how to speed up their workflow.
Video by: Tony
This video teaches viewers how to export a project from Adobe Premiere Pro and the various file types involved.

914 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

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now