store PropertyGroup in an external file
Try to pickle the custom property which saves the data. You can retrieve the dictionary from it with the .to_dict() method.

import bpy

print("-"*79)

class MyPropertyGroup(bpy.types.PropertyGroup):
    name = bpy.props.StringProperty()
    index = bpy.props.IntProperty()
    value = bpy.props.FloatProperty()


bpy.utils.register_class(MyPropertyGroup)
bpy.types.Object.test = \
    bpy.props.PointerProperty(type=MyPropertyGroup)

obj = bpy.context.object
#assign some data to test!
obj.test.name = "foo"
obj.test.index = 42
obj.test.value = 3.1416

#if you haven't assigned any data to the attributes of obj.test
#obj["test"] may not exist
#the expression statement
obj.test
#will create obj["test"] with default values then
dict_test = obj["test"].to_dict()

import pickle

bytes_test = pickle.dumps(dict_test)

del obj["test"]
#no data - returns default values
print(
    'del obj["test"]',
    "name: %s"%obj.test.name,
    "index: %d"%obj.test.index,
    "value: %f"%obj.test.value,
    "\n",
    sep="\n"
    )

dict_test = pickle.loads(bytes_test)
obj["test"] = dict_test
print(
    'obj["test"] = dict_test',
    "name: %s"%obj.test.name,
    "index: %d"%obj.test.index,
    "value: %f"%obj.test.value,
    sep="\n"
    )