Solved

Problems serializing class with float[,] property

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

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Suggested Solutions

Storage devices are generally used to save the data or sometime transfer the data from one computer system to another system. However, sometimes user accidentally erased their important data from the Storage devices. Users have to know how data reco…
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…
The viewer will learn how to set up a document for the web and print and the recommended PPI for printing.
The viewer will learn how to successfully download and install the SARDU utility on Windows 7, without downloading adware.

705 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

13 Experts available now in Live!

Get 1:1 Help Now