我目前通過套接字連接接收一個序列化的對象,這工作完美無瑕。我也正在反序列化它。現在,我希望客戶端通過網絡發送多個對象類型(或類)。這個對象是不是很好的練習?另外,還有更好的方法嗎?
這是我如何反序列化我的對象到它的類型「MyClass的」:
var m = new MemoryStream(Convert.FromBase64String(dataReceived));
var b = new BinaryFormatter();
var o = (MyClass)b.Deserialize(m);
現在,如果我想獲得超過1種對象類型我既可以做,可以將其轉換爲一個方法任何類型的支持或發送頭將告訴我對象的類型,然後投它。我更喜歡FIRST的方式。
事情是,我無法用GetType()當然投它,並且使用name屬性會導致我不喜歡的字符串切換。所以,我決定我能做到既:
object objectReceived = b.Deserialize(m);
if(o is MyClass){
MyClass myClass = (MyClass) objectReceived;
}
else if (o is AnotherClass){
AnotherClass myOtherClass = (AnotherClass) objectReceived;
}
(我還可以做的是運營商的東西,但是,這將讓我檢查空事後例如)
var MyClass = objectReceived as MyClass;
var AnotherClass = objectReceived as AnotherClass
OR我可以實現通過網絡發送的每個對象都會實現的接口,將該對象作爲該接口進行轉換,該接口將返回它的類型,然後進行相應的轉換!
事情是,我已經有了那個工作代碼,但我找不出一個乾淨的方式來編寫該接口。界面的方法應該返回什麼?一種?一個字符串?我真的不知道。這就是爲什麼我告訴自己:嗯,因爲我有工作代碼,如果這是良好的實踐並且易於維護,我不會因爲時間限制而陷入製作界面的麻煩,因爲我現在不知道如何操作界面。
所以這是我的問題:我的方法是正確的/良好的做法?或者界面方法更好?
非常感謝您的幫助!
關於返回值,最理想的情況是,您希望返回一個儘可能緊湊的類型以滿足所需數量的類並支持快速比較(即切換)。 (一個int可能?) – Wug 2012-07-05 14:30:13
出於興趣做這些不同的對象有共同的東西(即所有派生自給定的類型等等)還是它們完全獨立的對象? – Chris 2012-07-05 14:44:57
不,但他們可以,我想要的是他們擁有INTERFACE的共同點=)。感謝你的回答。 – Gaspa79 2012-07-05 14:51:48