好吧,我再次挣扎着一些代码,但它不起作用。 基本上,我有一个简单的学生班,名字,姓氏和组号:
[XmlRoot]
public class Student
{
string name;
string surname;
int group;
public Student(string _name, string _surname, int _group)
{
name= _name;
surname= _surname;
group= _group;
}
public Student()
{
}
public void writeAttributes()
{
Console.WriteLine("{0}{1}{2}",name, surname, group);
}
}
然后,我在Visual Studio中的解决方案有两个项目:一个是发件人,另一个是接收者。 我想要完成的是通过MSMQ(异步)发送此类的实例。 这是发件人代码:
class Program
{
static MessageQueue mq;
static void SendMessage(object sender, EventArgs e)
{
System.Messaging.Message msg = new System.Messaging.Message();
try
{
msg.Label = "Message Label";
mq.Send(new Student("Name", "Surname", 1000));
Console.WriteLine("We send a Student");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
static void Main(string[] args)
{
Timer timer1 = new Timer();
if (MessageQueue.Exists(@".\private$\NewPrivateQ"))
mq = new MessageQueue(@".\private$\NewPrivateQ");
else
mq = MessageQueue.Create(@".\private$\NewPrivateQ");
mq.Formatter = new XmlMessageFormatter(new Type[] { typeof(Student) });
//init the timer
System.Timers.Timer myTimer = new System.Timers.Timer();
myTimer.Elapsed += new System.Timers.ElapsedEventHandler(SendMessage);
myTimer.Interval = 3000;
myTimer.Enabled = true;
while (true) ;
}
}
我使用计时器,每隔3秒发送一次信息。 而且,这是接收者代码:
class Program
{
static void OnMessageArrival(IAsyncResult ar)
{
MessageQueue mq = (MessageQueue)ar.AsyncState;
try
{
Message msg = mq.EndReceive(ar);
var message = (Student)msg.Body;
//Console.WriteLine(message);
message.writeAttributes();
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
mq.BeginReceive(TimeSpan.FromSeconds(5), mq,
new AsyncCallback(OnMessageArrival));
}
}
static void Main(string[] args)
{
MessageQueue mq = new MessageQueue(@".\private$\NewPrivateQ");
mq.Formatter = new XmlMessageFormatter(new Type[] { typeof(Student) });
while (true)
{
try
{
IAsyncResult iar = mq.BeginReceive(TimeSpan.FromSeconds(5), mq, new AsyncCallback(OnMessageArrival));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
我什么都没收到。我尝试了很多方法。我试图将XmlFormatter更改为BinaryFormatter,但没有成功。
另一个有用的信息:它包含在两个项目中的学生课程:发件人和接收者。
答案 0 :(得分:1)
XmlSerializer不支持序列化私有字段,因此要使用此属性,您需要使用public
属性。
如果您需要该级别的序列化控制,您应该查看DataContractSerializer。