反序列化问题,求指教

lilo1314 2013-05-22 10:36:05

class Program
{
static void Main(string[] args)
{
Class1 c1 = new Class1();
c1.str1 = "100";
byte[] b1 = ObjectToBytes(c1);
Class2 c2 = (Class2)BytesToObject(b1);//这里转换为什么不行啊?
Object obj = BytesToObject(b1);
obj.GetType();
Console.WriteLine( obj.GetType());
Console.ReadKey();
}

/// <summary>
/// 序列化
/// </summary>
/// <param name="p_Object"></param>
/// <returns></returns>
public static byte[] ObjectToBytes(object p_Object)
{
BinaryFormatter _Formatter = new BinaryFormatter();
MemoryStream _Memory = new MemoryStream();
try
{
_Formatter.Serialize(_Memory, p_Object);
}
catch (Exception ex)
{
}
return _Memory.GetBuffer();
}

/// <summary>
/// 反序列化
/// </summary>
/// <param name="p_ObjectBytes"></param>
/// <returns></returns>
public static object BytesToObject(byte[] p_ObjectBytes)
{
BinaryFormatter _Formatter = new BinaryFormatter();
MemoryStream _MemStr = new MemoryStream(p_ObjectBytes);
try
{
return _Formatter.Deserialize(_MemStr);
}
catch (Exception ex)
{
return null;
}
}
}

类class1,class2都是只有一个字符串类型的属性。
注释处报:不能从class1转换成class2
...全文
127 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
showjim 2013-05-22
  • 打赏
  • 举报
回复
引用 10 楼 u010745059 的回复:
不可以是byte[]数组?
可以是byte[],但是两边需要统一的序列化规则。
qldsrx 2013-05-22
  • 打赏
  • 举报
回复
.NET要接收Java的对象,除非是用Json或XML序列化的,否则不可能反序列化成功。而你居然用BinaryFormatter,找死!
lilo1314 2013-05-22
  • 打赏
  • 举报
回复
引用 9 楼 w_mojian180 的回复:
想测试一下怎么接收远程发来的实例对象。 远程发送来的一般是xml 或者是json串,你应该把这些东西反序列化话为对象。而你上面的操作,单独的两个不相关的类相互转化报错是正常的。看看我给你的资料吧
不可以是byte[]数组?
路伊阑珊 2013-05-22
  • 打赏
  • 举报
回复
想测试一下怎么接收远程发来的实例对象。 远程发送来的一般是xml 或者是json串,你应该把这些东西反序列化话为对象。而你上面的操作,单独的两个不相关的类相互转化报错是正常的。看看我给你的资料吧
lilo1314 2013-05-22
  • 打赏
  • 举报
回复
引用 6 楼 w_mojian180 的回复:
引用 1 楼 bdmh 的回复:
class1和class2有啥关系,不是想咋么转换就怎么转换,他们要有继承关系
+1 建议贴出class1和class2的代码 或者至少说清楚class1和class2的关系
两个类没有关系,就是单独的两个类,里面都只有一个string属性。我就是想测试一下怎么接收远程发来的实例对象。
路伊阑珊 2013-05-22
  • 打赏
  • 举报
回复
可以参考一下这里http://developer.51cto.com/art/200908/146598.htm
路伊阑珊 2013-05-22
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
class1和class2有啥关系,不是想咋么转换就怎么转换,他们要有继承关系
+1 建议贴出class1和class2的代码 或者至少说清楚class1和class2的关系
lilo1314 2013-05-22
  • 打赏
  • 举报
回复
引用 3 楼 MicrosoftCenterOfHN 的回复:
类的结构相同并不代表这两个类可以相互替换. 在内存中就是两个互不相干的类(如果没有什么继承关系的话).所以谁也不能代表谁.
那序列化、反序列化是什么意思啊?我能接收一个java端实例么
wxl1010 2013-05-22
  • 打赏
  • 举报
回复
这样可以转换吗??类似于这样的装换,上面的代码估计不行,可以写个通用的转换方法,配置转换的规则去实现。
  • 打赏
  • 举报
回复
类的结构相同并不代表这两个类可以相互替换. 在内存中就是两个互不相干的类(如果没有什么继承关系的话).所以谁也不能代表谁.
lilo1314 2013-05-22
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
class1和class2有啥关系,不是想咋么转换就怎么转换,他们要有继承关系
版主大神,那我要从远程java端接收一个对象,本地怎么反序列化获取其属性值呢
bdmh 2013-05-22
  • 打赏
  • 举报
回复
class1和class2有啥关系,不是想咋么转换就怎么转换,他们要有继承关系
JDK 1.5的泛型實現(Generics in JDK 1.5) 1 侯捷觀點 JDK 1.5的泛型實現 — Generics in JDK 1.5 — 北京《程序員》 2004/09 台北《Run!PC》2004/09 作者簡介:侯捷,資訊教育、專欄執筆、大學教師。常著文章自娛,頗示己志。 侯捷網站:http://www.jjhou.com(繁體) 北京鏡站:http://jjhou.csdn.net(簡體) 永久郵箱:jjhou@jjhou.com . 讀者基礎:有 Java語言基礎,使用過 Java Collections。 . 本文適用工具: JDK1.5 . 本文程式源碼可至侯捷網站下載 http://www.jjhou.com/javatwo-2004-reflection-and-generics-in-jdk15-sample.ZIP . 本文是 JavaTwo-2004技術研討會同名講題之部分內容書面整理。 . 關鍵術語: persistence(永續性、持久性) serialization(序列化、次第讀寫) generics(泛型) polymorphism(多型) 全文提要 泛型技術與 Sun JDK的淵源可追溯自 JDK1.3。但無論 JDK 1.3或 JDK1.4,都只是 以編譯器外掛附件的方式來支援泛型語法,並且 Java標準程式庫未曾針對泛型全 侯捷觀點 Generics in JDK 1.5 面改寫。而今 JDK1.5正式納入泛型。本文討論 JDK1.5的泛型實現,包括如何使 用及自訂 generic classes and algorithms,其中若干語法異於 JDK 1.3和 1.4。 我 我我我我曾經在 JavaTwo 2002大會上針對泛型技術給出一個講題,並將內容整理為《Java 泛型技術之發展》一文(http://www.jjhou.com/javatwo-2002.htm)。該文所談的 Java 泛型語法以及 Java泛型技術之內部實作技術,在今天(被 JDK 1.5正式納入)依 然適用。但由於有了若干小變化,並且由於 Java標準程式庫的全面改寫,使我認 為有必要再整理這篇文章,讓讀者輕鬆地在 JDK 1.5中繼續悠遊「泛型」技術。 閱讀本文之前,如果自覺基礎不夠,可以補充閱讀適才提到的《Java泛型技術之 發展》,那是一篇非常完整的文章,可助您完整認識泛型技術的來龍去脈。 Sun JDK的泛型發展歷史要從 1.3版說起。該版本配合 GJ,正式進入泛型殿堂。 所謂 GJ是 "Generic Java" 的縮寫,是一個支援泛型的 Java編譯器補充件,可謂 Java 泛型技術的先趨。隨後,泛型議題正式成為 JSR #14,其技術基礎便是源自 GJ。 JDK1.4搭配 JSR14提供的外掛附件,使泛型技術在 Java世界從妾身未明的身份扶 正而為眾所屬目的焦點。今天,JDK1.5終於內建泛型特性,不僅編譯器不再需要 任何外力(外掛附件)的幫助,整個 Java標準程式庫也被翻新(retrofit),許多 角落針對泛型做了改寫。 讓我們把帶有「參數化型別」(parameterized types)的 classes稱為 generic classes, 把帶有「參數化型別」的 methods稱為 generic algorithms,那麼,對眾多 Java程 式員而言,泛型帶來的影響不外乎以下四點,稍後逐一說明。 ..如何使用 generic classes ..如何使用 generic algorithms ..如何自訂 generic classes ..如何自訂 generic algorithms 在此先提醒您,運用泛型時,加上 –Xlint:unchecked編譯選項,可讓編譯器幫 助我們檢查潛在的型別轉換問題。 侯捷觀點 JDK 1.5的泛型實現(Generics in JDK 1.5)3 使用 Generic Classes Generic classes的最大宗運用是 collections(群集),也就是實作各種資料結構(例 如 list, map, set, hashtable)的那些 classes。也有人稱它們為容器( containers)。這 些容器被設計用來存放 Object-derived元素。而由於 Java擁有單根繼承體系,任 何 Java classes都繼承自 java.lang.Object,因此任何 Java ob

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧