B4J Question Unable to serialize my class Object ?

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

  1. aregan

    aregan Member Licensed User


    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?

    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()
    Dim bBytes() As Byte
        strSample = 
    'This works
        bBytes = serializer.ConvertObjectToBytes(a)
    'This throws the error
        bBytes = serializer.ConvertObjectToBytes(obj)


    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.

  4. LucaMs

    LucaMs Expert Licensed User

    Yes, custom objects are not allowed.
  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