def getNonDefaultsDict(self):
        """ Recursively retrieves values as a dictionary to be used for persistence.
            Does not save defaultData and other properties, only stores values if they differ from
            the defaultData. If the CTI and none of its children differ from their default, a
            completely empty dictionary is returned. This is to achieve a smaller json
            representation.

            Typically descendants should override _nodeGetNonDefaultsDict instead of this function.
        """
        dct = self._nodeGetNonDefaultsDict()

        childList = []
        for childCti in self.childItems:
            childDct = childCti.getNonDefaultsDict()
            if childDct:
                childList.append(childDct)
        if childList:
            dct['childItems'] = childList

        if dct:
            dct['nodeName'] = self.nodeName

        return dct
Recursively retrieves values as a dictionary to be used for persistence.
            Does not save defaultData and other properties, only stores values if they differ from
            the defaultData. If the CTI and none of its children differ from their default, a
            completely empty dictionary is returned. This is to achieve a smaller json
            representation.

            Typically descendants should override _nodeGetNonDefaultsDict instead of this function.