PlayFabSimpleJson can't correctly deserialize custom classes which implement IDictionary / IDictionary interfaces.
For example:
public class SerializedDictionary< TKey, TValue > : IDictionary< TKey, TValue >, IDictionary
Serialization is ok, it gives the same results as Dictionary, however problem is with deserialization. PlayFabSimpleJson.DeserializeObject returns empty collection.
I have digged a bit into the problem and in my opinion ReflectionUtils.IsTypeDictionary is the root of the problem. It can't correctly recognize that class is implementing IDictionary< TKey, TValue >.
Not sure why IsAssignableFrom doesn't work. It also returns false for standard Dictionary, so maybe it's because of generics. Standard Dictionary it's detected by direct checking of type:
return genericDefinition == typeof(IDictionary<,>) || genericDefinition == typeof(Dictionary<,>);
For sure there is some solution to handle also custom classes by reflection