自定义序列化为空格分隔的字符串,仅包含值和无键

时间:2013-01-08 20:35:22

标签: c# serialization

我正在为MSN Messenger协议编写客户端,并且我有代表发送到服务器和从服务器发送的命令的类

这些例子是简化的

class AddUserCommand {
    public int TransactionId { get; set; }
    public string EmailAddress { get; set; }
}

class SendMessageCommand {
    public int TransactionId { get; set; }
    public string Recipient { get; set; }
    public string DeliveryMethod { get; set; }
    public int MessageLength { get; set; }
    public string Message { get; set; }
}

是否可以使用.NET框架中已有的类将这些命令序列化为非常简单的以空格分隔的字符串,以便通过套接字发送?

例如..

 AddUserCommand becomes
 ADD 3 bob@bob.com

 SendMessageCommand becomes
 MSG 2 bob@bob.com OFFLINE 28
 Hello bob how are you doing?

问题是我看到/使用过的所有序列化类都使用键值对,因为我希望键中的参数位置隐含键。

1 个答案:

答案 0 :(得分:3)

不,您必须自己编写或使用已经说明此协议的库。

您需要编写将这些对象转换为字符串的代码。您不会使用内置接口。为什么?因为没有任何东西可以帮助你。您可以使用界面,但它可能是您自己编写的界面。显然,如果愿意,您可以选择使用各种实用程序类,例如TextWriter,但这些只是数据流,而不是序列化。问题是您正在尝试符合外部应用程序定义的非标准化格式。为什么.NET框架与MSN Messenger有关?

您可以使用通用的序列化库,但IMO最好自己编写,因为这些库会导致代码比自己编写更复杂。它们中的大多数将基于键值对,因此不太适合。此外,使用您自己的代码解决这个问题也不是一个难题。