我有一个服务器和客户端,我使用XmlSerializer序列化数据包对象,并且由于另一端的类型未知,我创建了以下方法来处理它。
两个程序集都包含相同类型的数据包,因此只会发送已知类型。
public static class Serializer
{
private static readonly List<Type> packetTypes;
static Serializer()
{
packetTypes = new List<Type>()
{
typeof(Packets.ClientPackets.PlayerInformation),
typeof(Packets.ClientPackets.DoSomething)
};
}
public static IPacket Deserialize(byte[] buffer)
{
foreach (var t in packetTypes)
{
using (var ms = new MemoryStream())
{
try
{
ms.Write(buffer, 0, buffer.Length);
ms.Seek(0, SeekOrigin.Begin);
var serializer = new XmlSerializer(t);
var tempObject = serializer.Deserialize(ms);
return (IPacket)tempObject;
}
catch (Exception)
{
}
}
}
return null;
}
}
所以它会循环遍历所有已知的类型。
现在这种方法很好,但是我想知道是否有更高效或者说正确的方法吗?这里有风险吗?
P.S。我仅限于无法使用任何外部库。