B4J Question Unable to serialize my class Object ?

Discussion in 'B4J Questions' started by aregan, Jun 9, 2019.

  1. aregan

    aregan Member Licensed User

    Hi,

    I'm new to B4J so this is probably a really simple question.

    I'm writing my first B4J Server process to with handlers to accept requests from by B4A app and send back lists of records which are available in a list of class objects. The class with its public members are shared in both my client and server apps.

    I'm hoping to simply serialize it in the server and send it back to the app to deserialize.

    So in my server handler class handle function, I've created an instance of the B4XSerializator and called the ConvertObjectToBytes function.

    If I simply pass a string type to the ConvertObjectToBytes if works.
    If I pass my class object instance to the it I get an error "Cannot serialize object"
    Both are declared in the Class Globals
    The class only has some basic public members of primitive types declared in it.

    Any ideas why?




    Code:
    Sub Class_Globals
        
    Private mreq As ServletRequest 'ignore
        Private mresp As ServletResponse 'ignore

        
    Public lstTasks As List
        
        
    Public strSample As String
        
    Public obj As clsIncident

    End Sub

    Public Sub Initialize

    End Sub

    Sub Handle(req As ServletRequest, resp As ServletResponse)
        
        
        
        
    Private serializer As B4XSerializator
        
        
        mreq = req
        mresp = resp
        
        
        lstTasks = mDatabase.GetTaskList()
        lstTasks.Initialize
        
        
    Dim bBytes() As Byte
        obj.Initialize(
    1,"123","123")
        
        strSample = 
    "TEST"
        
        
    'This works
        bBytes = serializer.ConvertObjectToBytes(a)
        
        
    'This throws the error
        bBytes = serializer.ConvertObjectToBytes(obj)

    -------------

    Code:
    Sub Class_Globals

        
        
    Public ID As Long
        
    Public OpenedTime As Long 
        
    Public IncidentStatusID As Long
        
        
        
    Public AcceptedTime As Long
        
    Public ExpectedOnSiteTime As Long
        
    Public OnSiteTime As Long
        
    Public ExpectedOffSiteTime As Long
        
    Public OffSiteTime As Long
        
        
    Public IncidentTypeID As Long
        
    Public Post As String
        
    Public PostAddress As String
        
        
    Public ClosedTime As Long
        
    Public DocketNumber As String
        
    Public KeypointsClocked As Boolean
        
    Public IncidentDescription As String
        
    Public Observations As String
        
    Public ActionTaken As String
        
    Public ZonesReportedByMonitoringStation As String
        
    Public ReasonForActivation As String
        
    Public FurtherActionRequired As Boolean
        
    Public FurtherAction As String
    End Sub

    'Initializes the object. You can add parameters to this method if needed.
    Public Sub Initialize (parID As Long, parPostName As String, parPostAddress As String)
        
        
    ID = parID
        Post = parPostName
        PostAddress = parPostAddress
        
    End Sub
     
  2. LucaMs

    LucaMs Expert Licensed User

    Create a type instead of that class and declare it in Main - Process_Globals.
     
  3. aregan

    aregan Member Licensed User


    Thanks LucaMs

    Are classes just not supported for serializing ? I looked in the spec and it mentioned the various types that could be serialized. It mentioned OBJECTS could be serialized. I assumed (but maybe incorrectly) that my own defines class objects could be serialized.

    Thanks
    Alan
     
  4. LucaMs

    LucaMs Expert Licensed User

    Yes, custom objects are not allowed.
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice