?
Solved

Problems serializing class with float[,] property

Posted on 2008-06-14
1
Medium Priority
?
952 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
1 Comment
 
LVL 1

Accepted Solution

by:
gregmulvihill earned 1000 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

 [eBook] Windows Nano Server

Download this FREE eBook and learn all you need to get started with Windows Nano Server, including deployment options, remote management
and troubleshooting tips and tricks

Question has a verified solution.

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

Developer portfolios can be a bit of an enigma—how do you present yourself to employers without burying them in lines of code?  A modern portfolio is more than just work samples, it’s also a statement of how you work.
Invest in your employees with these five simple steps to improve employee engagement and retention.
The viewer will learn how to successfully download and install the SARDU utility on Windows 7, without downloading adware.
Michael from AdRem Software explains how to view the most utilized and worst performing nodes in your network, by accessing the Top Charts view in NetCrunch network monitor (https://www.adremsoft.com/). Top Charts is a view in which you can set seve…

764 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