diff --git a/vaadin-grid-flow-parent/vaadin-grid-flow/src/main/java/com/vaadin/flow/component/grid/Grid.java b/vaadin-grid-flow-parent/vaadin-grid-flow/src/main/java/com/vaadin/flow/component/grid/Grid.java index 3d1dd97abfe..b228a52066e 100755 --- a/vaadin-grid-flow-parent/vaadin-grid-flow/src/main/java/com/vaadin/flow/component/grid/Grid.java +++ b/vaadin-grid-flow-parent/vaadin-grid-flow/src/main/java/com/vaadin/flow/component/grid/Grid.java @@ -496,10 +496,31 @@ public Column(Grid grid, String columnId, Renderer renderer) { if (dataGenerator.isPresent()) { var generator = dataGenerator.get(); - DataGenerator conditionalDataGenerator = (item, - jsonObject) -> { - if (Column.this.isVisible()) { - generator.generateData(item, jsonObject); + + // Use an anonymous class instead of Lambda to prevent potential + // deserialization issues when used with Grid + // see https://github.com/vaadin/flow-components/issues/6256 + var conditionalDataGenerator = new DataGenerator() { + @Override + public void generateData(T item, JsonObject jsonObject) { + if (Column.this.isVisible()) { + generator.generateData(item, jsonObject); + } + } + + @Override + public void destroyData(T item) { + generator.destroyData(item); + } + + @Override + public void destroyAllData() { + generator.destroyAllData(); + } + + @Override + public void refreshData(T item) { + generator.refreshData(item); } }; columnDataGeneratorRegistration = grid