Recommended way to read Entity data? (Unity, C#)

  • Hi, I'm experimenting with brainCloud in Unity (C#) and I'm trying to read a Global Entity. I can get the JSON of the Entity object but then what's the best way to access the "data" key inside? I can do it in a convoluted way but I'm hoping there's a friendlier way using the API.
    Here's some sample code with questions in the comments:

    string entityId = "whatever";
    SuccessCallback successCallback = (jsonResponse, cbObject) =>
    	// Unity's JsonUtility doesn't support Dictionaries so I guess I should use brainCloud's internal JsonReader?
    	// And is there a more specific class I can Deserialize to, or should I just use generic Dictionaries?
    	var responseDict = JsonReader.Deserialize<Dictionary<string, object>>(jsonResponse);
    	var entityDict = responseDict["data"] as Dictionary<string, object>;
    	var myDataDict = entityDict["data"] as Dictionary<string, object>;
    	// Now I have my data as a Dictionary, but ideally I want to deserialize it into my own custom class type...
    	// So should I *re-serialize* it back to JSON so I can read it? This seems unnecessary.
    	var myDataJson = JsonWriter.Serialize(myDataDict);
    	var myData = JsonReader.Deserialize<MyCustomClass>(myDataJson);
    	// Now I have my data in the correct form!
    FailureCallback failureCallback = (status, reasonCode, jsonError, cbObject) => {};
    _bc.GlobalEntityService.ReadEntity(entityId, successCallback, failureCallback);

    Seems like there's probably an easier way to do it, just wondering what you recommend?

  • Hi Henry,

    Yes the data received is in JSON. And brainCloud expects a JSON when you update the entity. What you can do is create a serialize and a deserialize method inside your custom type.

  • @Henry-Smith said in Recommended way to read Entity data? (Unity, C#):

    Sorry to bring back an old thread, but I'm just learning the platform and I thought I'd share my solution to this.

    First, define a generic class to handle the raw json response data:
    eg. my Tut1_AddTwoNumbers api returns:

        public class Response<T>
            public ResponseData<T> data;
            public int status;
        public class ResponseData<T>
            public T response;
            public bool success;

    Then for each api call that you have, define a class that contains the fields that are custom to that response.

        public class Tut1_AddTwoNumbersResponse
            public int answer;

    Now, you call your function and handle the response like this:

        public void Tut1_AddTwoNumbers()
            string scriptName = "Tut1_AddTwoNumbers";
            // Anonymous object to supply the params.
            var data = new
                num1 = 16,
                num2 = 8
            var jsonScriptData = JsonWriter.Serialize(data);
            SuccessCallback successCallback = (response, userdata) =>
                var responseObject = JsonReader.Deserialize<Response<Tut1_AddTwoNumbersResponse>>(response);
                //var responseObject = JObject.Parse(response);
                Debug.Log($"Success The answer is '{}' | raw_json={response}");
            FailureCallback failureCallback = (status, code, error, userdata) =>
                Debug.Log(string.Format("Failed | {0}  {1}  {2}", status, code, error));
            // Call the script 
            _bc.ScriptService.RunScript(scriptName, jsonScriptData, successCallback, failureCallback);

    this line is the important part:


    Hope that helps someone!

Log in to reply