2015-03-15 2 views
1

Я пытаюсь использовать FlexJSON для сериализации java-объекта. Объект имеет некоторые поля верхнего уровня и коллекцию, называемую результатами. Изнутри коллекции я хочу только несколько свойств, но все они сериализуются. Вот код, который я пытаюсь.Исключая поля во время сериализации json

jsons = new JSONSerializer().include("results.ourID","results.name","results.fmtDistance","results.shows.showName","results.knownForNoHTML").exclude("results"); 

Я также пробовал результаты. * В исключении. Не повезло - все поля результатов сериализованы.

ответ

0

От http://flexjson.sourceforge.net/

Использование точечной нотации с exludes имеет тонкое различие в его использовании по сравнению с включает в себя. Если вы исключаете вложенное поле, то подразумевается, что остальная часть родительского объекта включена . Поэтому, если я скажу исключить («head.rightEye.retinalScan»). Член retinalScan поля rightEye будет исключен, но оба поля rightEye и head будут включены в . Причина заключается в том, чтобы исключить поле retinalScan, которое вы должны указать в элементе rightEye: . Если вы этого не сделали, то не ничего не измените, потому что retinalScan не будет включен в первое место . С другой стороны, это только последнее поле, которое содержит , исключено все остальные родительские поля.

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

+0

Мой вопрос был я имел очень старую версию flexjson, не реализовать все в документации, когда я модернизировал свой код (с результатами. *) работал. – gunygoogoo

2

Вместо .exclude("results"); вы должны использовать .exclude("*");. Это исключает все остальные параметры, кроме тех, которые вы указали.

Так что в этом случае ваша линия должна быть:

jsons = new JSONSerializer().include("results.ourID","results.name","results.fmtDistance","results.shows.showName","results.knownForNoHTML").exclude("*");