在我的应用程序中,我有一个PacketList
班级和Packet
班级。我希望能够使用序列化助手PacketList
来提出所需的输出,但不知道该往哪个方向发展。
我正在编写一个程序来模仿具有特殊协议的服务器来发送数据。
客户端发送格式为: 的数据COMMAND|ARGUMENT_0|ARGUMENT_1|ARGUMENT_2|...|ARGUMENT_N\0
。哪里COMMAND
可能像MOVE
or LOGIN
。
服务器将以以下格式响应:
<p c='COUNT'>
<m p='N' p0='COMMAND_0' p1='ARUGMENT_0' ... pN='ARGUMENT_N'/>
<m p='N' p0='COMMAND_1' p1='ARUGMENT_0' ... pN='ARGUMENT_N'/>
<m p='N' p0='COMMAND_2' p1='ARUGMENT_0' ... pN='ARGUMENT_N'/>
<m p='N' p0='COMMAND_3' p1='ARUGMENT_0' ... pN='ARGUMENT_N'/>
...
<m p='N' p0='COMMAND_COUNT' p1='ARUGMENT_0' ... pN='ARGUMENT_N'/>
</p>
哪里COMMAND_0
可能像UPDATE_POSITION
or AUTHENTICATED
。
是的,这是一种愚蠢的做事方式。不,我不知道为什么会这样。不,我不能改变它。
无论如何,我希望模拟服务器将数据包发送回客户端的方式。到目前为止我得到的是:
XmlWriterSettings _Settings = new XmlWriterSettings {
OmitXmlDeclaration = true,
Indent = true
};
StringBuilder _Xml = new StringBuilder();
XmlWriter _Writer = XmlWriter.Create(_Xml, _Settings);
_Writer.WriteStartElement("p");
_Writer.WriteAttributeString("c", "1");
_Writer.WriteStartElement("m");
_Writer.WriteAttributeString("p", "2");
_Writer.WriteAttributeString("p0", "COMMAND");
_Writer.WriteAttributeString("p1", "ARGUMENT_0");
_Writer.WriteAttributeString("p2", "ARGUMENT_1");
_Writer.WriteEndElement(); // </m>
_Writer.WriteEndElement(); // </p>
_Writer.Flush();
Console.WriteLine(_Xml.ToString());
这可以正常工作并输出:
<p c="1">
<m p="2" p0="COMMAND" p1="ARGUMENT_0" p2="ARGUMENT_1" />
</p>
但是,我想以更清洁的方式实现这一点。
MyPacketList
基本上包含一个Packet
s 列表,并Packet
包含一个String _Command
和String[] _Arguments
.
如果有人能引导我朝着正确的方向前进,将不胜感激。