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
Solved

Problems serializing class with float[,] property

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

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

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

A list of useful business intelligence software.
This article aims to explain the working of CircularLogArchiver. This tool was designed to solve the buildup of log file in cases where systems do not support circular logging or where circular logging is not enabled
This video demonstrates how to use each tool, their shortcuts, where and when to use them, and how to use the keyboard to improve workflow.
The viewer will learn how to successfully download and install the SARDU utility on Windows 7, without downloading adware.

860 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