Какую цель выполняет поиск данных в JSON? Это чисто для отчетности? Если это так, то Брайан прав, у этих переменных должны быть методы получения.
Если целью сериализации является передача данных в приложение JavaScript, где их можно манипулировать и затем вернуть в исходное приложение, то, возможно, вам лучше всего будет создать связанный класс, который служит для целей сериализации, оставаясь поддержание сильной инкапсуляции.
Например, в Java вы можете определить внутренний класс. Внутренний экземпляр класса имеет прямой доступ ко всем полям включающего экземпляра класса без необходимости использования методов-получателей. Или вы можете сгруппировать пакет (или пространство имен), используя правильные модификаторы доступа, чтобы разрешить доступ сериализатором, но не любым другим классом.
Или вы могли бы использовать отражение. Или перехватите метод toString. (Или осветите все это и создайте метод toJson.)