From 060d9fa4f138ca07f596386972265782e5ec7b7a Mon Sep 17 00:00:00 2001 From: U65535F <132809543+U65535F@users.noreply.github.com> Date: Thu, 6 Mar 2025 17:42:22 +0530 Subject: [PATCH] Serialize lists to comma delimited string in PaymentAccount.toJson() (#1620) --- .../haveno/core/payment/PaymentAccount.java | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/haveno/core/payment/PaymentAccount.java b/core/src/main/java/haveno/core/payment/PaymentAccount.java index 8dda8fdedd..14dd88482b 100644 --- a/core/src/main/java/haveno/core/payment/PaymentAccount.java +++ b/core/src/main/java/haveno/core/payment/PaymentAccount.java @@ -36,6 +36,7 @@ package haveno.core.payment; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; import haveno.common.proto.ProtoUtil; import haveno.common.proto.persistable.PersistablePayload; import haveno.common.util.Utilities; @@ -341,12 +342,29 @@ public abstract class PaymentAccount implements PersistablePayload { // ---------------------------- SERIALIZATION ----------------------------- public String toJson() { - Map jsonMap = new HashMap(); - if (paymentAccountPayload != null) jsonMap.putAll(gsonBuilder.create().fromJson(paymentAccountPayload.toJson(), (Type) Object.class)); + Gson gson = gsonBuilder.create(); + Map jsonMap = new HashMap<>(); + + if (paymentAccountPayload != null) { + String payloadJson = paymentAccountPayload.toJson(); + Map payloadMap = gson.fromJson(payloadJson, new TypeToken>() {}.getType()); + + for (Map.Entry entry : payloadMap.entrySet()) { + Object value = entry.getValue(); + if (value instanceof List) { + List list = (List) value; + String joinedString = list.stream().map(Object::toString).collect(Collectors.joining(",")); + entry.setValue(joinedString); + } + } + + jsonMap.putAll(payloadMap); + } + jsonMap.put("accountName", getAccountName()); jsonMap.put("accountId", getId()); if (paymentAccountPayload != null) jsonMap.put("salt", getSaltAsHex()); - return gsonBuilder.create().toJson(jsonMap); + return gson.toJson(jsonMap); } /** @@ -388,12 +406,7 @@ public abstract class PaymentAccount implements PersistablePayload { PaymentAccountForm form = new PaymentAccountForm(PaymentAccountForm.FormId.valueOf(paymentMethod.getId())); for (PaymentAccountFormField.FieldId fieldId : getInputFieldIds()) { PaymentAccountFormField field = getEmptyFormField(fieldId); - Object value = jsonMap.get(HavenoUtils.toCamelCase(field.getId().toString())); - if (value instanceof List) { // TODO: list should already be serialized to comma delimited string in PaymentAccount.toJson() (PaymentAccountTypeAdapter?) - field.setValue(String.join(",", (List) value)); - } else { - field.setValue((String) value); - } + field.setValue((String) jsonMap.get(HavenoUtils.toCamelCase(field.getId().toString()))); form.getFields().add(field); } return form;