我目前正在通过套接字连接接收序列化对象,这完美无缺。我也在反序列化它。现在,我希望客户端通过网络发送多个对象类型(或类)。
这就是我将我的对象反序列化到它的类型'MyClass'的方式:
var m = new MemoryStream(Convert.FromBase64String(dataReceived));
var b = new BinaryFormatter();
var o = (MyClass)b.Deserialize(m);
现在,如果我想接收超过 1 个对象类型,我可以创建一个可以将其转换为任何支持的类型的方法,或者发送一个标头,告诉我对象的类型然后转换它。我更喜欢第一种方式。
问题是,我当然不能用 GetType() 来转换它,并且使用 name 属性会导致一些我不喜欢的字符串切换。所以我决定我可以这样做:
object objectReceived = b.Deserialize(m);
if(o is MyClass){
MyClass myClass = (MyClass) objectReceived;
}
else if (o is AnotherClass){
AnotherClass myOtherClass = (AnotherClass) objectReceived;
}
(我也可以用 as 运算符做一些事情,但这会让我事后检查空值。例如)
var MyClass = objectReceived as MyClass;
var AnotherClass = objectReceived as AnotherClass
或者我可以实现一个接口,通过网络发送的每个对象都将实现该接口,将对象转换为该接口,该接口将返回它的类型,然后相应地转换它!
问题是,我已经有了那个工作代码,但是我想不出一个干净的方法来编码那个接口。接口的方法应该返回什么?一种?一个字符串?我真的不知道。这就是为什么我告诉自己:好吧,因为我有工作代码,如果它是好的实践并且易于维护,我不会让自己陷入制作界面的麻烦,因为时间限制我现在不知道该怎么做.
所以这就是我的问题:我的方法是否正确/良好的做法?还是界面方法更好?
非常感谢你们的帮助!!