public static object Deserialize(MemoryStream stream, Type type) { BinaryReader reader = new BinaryReader(stream); object o = Activator.CreateInstance(type); FieldInfo[] fields = o.GetType().GetFields(); foreach (FieldInfo f in fields) { Type t = f.FieldType; object v = null; switch (t.FullName) { case "System.Boolean": v = reader.ReadBoolean(); break; case "System.Char": v = reader.ReadChar(); break; case "System.Byte": v = reader.ReadByte(); break; case "System.SByte": v = reader.ReadSByte(); break; case "System.Int16": v = reader.ReadInt16(); break; case "System.UInt16": v = reader.ReadUInt16(); break; case "System.Int32": v = reader.ReadInt32(); break; case "System.UInt32": v = reader.ReadUInt32(); break; case "System.Int64": v = reader.ReadInt64(); break; case "System.UInt64": v = reader.ReadUInt64(); break; case "System.Single": v = reader.ReadSingle(); break; case "System.Double": v = reader.ReadDouble(); break; case "System.Decimal": v = reader.ReadDecimal(); break; case "System.String": v = reader.ReadString(); break; default: v = XCSharp.Deserialize(stream, t); break; } f.SetValue(o, v); } return(o); }