2016-11-23 1 views
1

Мне нужно нести все данные json (чтобы сохранить их, войти в систему, вернуться), но я никогда не буду обращаться к ним из кода. есть ли способ избежать десериализации их, но все еще использовать их во время сериализации?Джексон: избегайте десериализации некоторых полей, но не игнорируя их.

class MyObject {  
    int importantField; // i want this field to be properly deserialized 
    String notImportantJsonGarbage; // i don't care what's here. it must be a valid json 
} 

Так что теперь я хотел бы быть в состоянии десериализации его от

{"importantField":7, "notImportantJsonGarbage":{"key1":3, "key2":[1,2,3]}} 

, а затем сериализовать его в той же строке

UPDATE

я не хотите игнорировать это свойство. Мне нужны эти данные. но как строка, не полностью десериализованного объект

я должен быть в состоянии сделать:

json1 -> object -> json2 
json1 == json2 
+0

Вы попробуйте использовать JSONObject как я уже говорил в моем ответе? Я думаю, что это решает вашу проблему. Вы можете прочитать это для json-объекта и десериализировать его только тогда, когда это необходимо. – gaganbm

ответ

2

Взгляни: JsonProperty.Access

  • AUTO - настройка доступа, которая означает, что правила видимости должны использоваться для автоматического определения доступа для чтения и/или записи этого свойства.

  • READ_ONLY - настройка доступа, что означает, что свойство может быть прочитана только для сериализации, но не написано (набор) во время
    десериализации.

  • READ_WRITE - настройка доступа, что означает, что свойство будет доступно как для сериализации (выписывая значения, как внешнего представления) и десериализации (чтение значения из
    внешнего представления), независимо от правил видимости.

  • WRITE_ONLY - настройка доступа, что означает, что свойство может быть записано только (набор) для десериализации, но не будет читать (получить) сериализацию, то есть, значение свойства не включено в сериализации.

Так что в вашем случае вы могли бы использовать его как это:

@JsonProperty(access = Access.READ_ONLY) 
private String notImportantJsonGarbage; 
+0

, но этот способ 'notImportantJsonGarbage' является' null'. поэтому информация отсутствует и мое требование **, а затем сериализовать его в одну строку ** не выполняется – piotrek

0

Вы можете использовать тип JSONObject для поля Json.

private JSONObject notImportantJsonGarbage; 

И когда вам нужно это прочитать, вы можете преобразовать его в строку (или другой тип). Вы можете использовать библиотеки jackson или gson для достижения этого.

Обратите внимание, что при преобразовании JsonObject обратно в String результирующая строка может иметь экранированные кавычки.

Использование JSONObject также решает, что ваше требование должно быть допустимым json-объектом.

0

Вы можете использовать аннотацию @JsonIgnore на имущество, которое вы хотите игнорировать

Смежные вопросы