Сериализация бизнес-объектов в формате JSON - PullRequest
3 голосов
/ 03 апреля 2009

Я пытаюсь сериализовать свои бизнес-объекты в JSON для использования приложением Javascript. Проблема в том, что я пытаюсь сохранить свои бизнес-объекты "чистыми" в том смысле, что они не знают о доступе к данным или постоянстве. Мне кажется, что «разбавление» моих объектов функцией toJSON () пошло бы против этой цели. С другой стороны, использование внешнего объекта для сериализации моих бизнес-объектов не сработает, поскольку все мои переменные экземпляра остаются закрытыми.

Я не совсем правильно подхожу к этому?

Ответы [ 3 ]

6 голосов
/ 03 апреля 2009

Если переменные экземпляра являются закрытыми, они не должны появляться в сериализации, отправляемой в приложение JavaScript. По определению, если вы сериализуете их и отправляете в отдельное приложение, они являются общедоступными. Таким образом, внешний объект должен иметь некоторый способ доступа к ним, возможно, с помощью каких-либо методов получения.

1 голос
/ 03 апреля 2009

Какую цель выполняет поиск данных в JSON? Это чисто для отчетности? Если это так, то Брайан прав, у этих переменных должны быть методы получения.

Если целью сериализации является передача данных в приложение JavaScript, где их можно манипулировать и затем вернуть в исходное приложение, то, возможно, вам лучше всего будет создать связанный класс, который служит для целей сериализации, оставаясь поддержание сильной инкапсуляции.

Например, в Java вы можете определить внутренний класс. Внутренний экземпляр класса имеет прямой доступ ко всем полям включающего экземпляра класса без необходимости использования методов-получателей. Или вы можете сгруппировать пакет (или пространство имен), используя правильные модификаторы доступа, чтобы разрешить доступ сериализатором, но не любым другим классом.

Или вы могли бы использовать отражение. Или перехватите метод toString. (Или осветите все это и создайте метод toJson.)

0 голосов
/ 09 апреля 2009

Вы думаете о создании JSON из не-javascript кода (например, серверной Java)? Тип ответа зависит от этого: обработка JSON сильно отличается от Javascript и, скажем, Java. Уже есть ответ на стороне javascript, который кажется правильным.

Если это на Java, есть библиотеки, которые могут помочь; например ( Джексон ) может десериализовать любой боб, используя обычный метод самоанализа getX / setX; плюс дополнительные (и необязательные) аннотации.

...