in sdk/core/azure-core-jackson/src/main/java/com/azure/android/core/serde/jackson/AdditionalPropertiesSerializer.java [95:137]
public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
ObjectNode root = mapper.valueToTree(value);
ObjectNode res = root.deepCopy();
Queue<ObjectNode> source = new LinkedBlockingQueue<ObjectNode>();
Queue<ObjectNode> target = new LinkedBlockingQueue<ObjectNode>();
source.add(root);
target.add(res);
while (!source.isEmpty()) {
ObjectNode current = source.poll();
ObjectNode resCurrent = target.poll();
Iterator<Entry<String, JsonNode>> fields = current.fields();
while (fields.hasNext()) {
Entry<String, JsonNode> field = fields.next();
String key = field.getKey();
JsonNode outNode = resCurrent.get(key);
if ("additionalProperties".equals(key)) {
// Handle additional properties
resCurrent.remove(key);
// put each item back in
ObjectNode extraProperties = (ObjectNode) outNode;
Iterator<Entry<String, JsonNode>> additionalFields = extraProperties.fields();
while (additionalFields.hasNext()) {
Entry<String, JsonNode> additionalField = additionalFields.next();
resCurrent.put(additionalField.getKey(), additionalField.getValue());
}
}
if (field.getValue() instanceof ObjectNode) {
source.add((ObjectNode) field.getValue());
target.add((ObjectNode) outNode);
} else if (field.getValue() instanceof ArrayNode
&& (field.getValue()).size() > 0
&& (field.getValue()).get(0) instanceof ObjectNode) {
Iterator<JsonNode> sourceIt = field.getValue().elements();
Iterator<JsonNode> targetIt = outNode.elements();
while (sourceIt.hasNext()) {
source.add((ObjectNode) sourceIt.next());
target.add((ObjectNode) targetIt.next());
}
}
}
}
jgen.writeTree(res);
}