简体   繁体   English

Pojo 类序列化为 json

[英]Pojo classes to serialize to json

I want to display my Json response as below.我想如下显示我的 Json 响应。 Below are my classes.下面是我的课。 Class name (transaction_status) should not come in json response, is their any way we can achieve this any suggestion experts? Class 名称(transaction_status)不应该出现在 json 响应中,他们有什么方法可以实现这一点吗?

//Expected json response
{
    "view": {
        "payment_transaction": [
            {

                "status": "Delivered",   
                "reason": "XXX",        
                "event": [
                    {
                           "status": "Delivered",  
                           "reason": "XXX" 
                        }
                    }
                ]
            }
        ]
    }
}

// but it is coming as below 
{
    "view": {
        "payment_transaction": [
            {

                "status": "Delivered",   // 1)Coming correctly
                "reason": "XXX",         // 2)Coming correctly 
                "event": [
                    {
                        "transaction_status": { // don't want to this field to come
                            "status": "Delivered",  
                            "reason": "XXX" 
                        }
                    }
                ]
            }
        ]
    }
}

public class View {
    public static class PaymentExternalView {

     @SerializedName("status")
     private String transactionStatus;

     @SerializedName("reason")
     private String transactionStatusReason;

     private transient TransactionStatus tranStatus;

     public TransactionStatus getTranStatus() {
           return tranStatus;
     }

     public void setTranStatus(TransactionStatus tranStatus) {
           this.tranStatus = tranStatus;
     }

     public String getTransactionStatus() {  
           this.transactionStatus = tranStatus.getStatus().toString();
           return transactionStatus;
     }

     public void setTransactionStatus(String transactionStatus) {
           this.transactionStatus = transactionStatus;
     }

     public String getTransactionStatusReason() {
           this.transactionStatusReason = tranStatus.getReason().toString();
           return transactionStatusReason;
     }

     public void setTransactionStatusReason(String transactionStatusReason) {
           this.transactionStatusReason = transactionStatusReason;
     }

   }

    public static class Event {

    private TransactionStatus transactionStatus;

    //@SerializedName("status")       // If I specify these variables error is coming as Multiple json fileds 
    //private String transactionStatus;

    //@SerializedName("reason")
    //private String transactionStatusReason;


    public TransactionStatus getTransactionStatus() {
        this.transactionStatus = tranStatus.t
        return transactionStatus;
     }

     public void setTransactionStatus(TransactionStatus status) {
       this.transactionStatus = status;
     }
     /**
     public String getTransactionStatus() {
           this.transactionStatus = tranStatus.getStatus().toString();
           return transactionStatus;
     }

     public void setTransactionStatus(String transactionStatus) {
           this.transactionStatus = transactionStatus;
     }

     public String getTransactionStatusReason() {
           this.transactionStatusReason = tranStatus.getReason().toString();
           return transactionStatusReason;
     }

     public void setTransactionStatusReason(String transactionStatusReason) {
           this.transactionStatusReason = transactionStatusReason;
     }
     **/
    }
}


public class TransactionStatus {
  private String status;

  private String reason;

  public String getStatus() {
     return status;
  }
  public void setStatus(String status) {
     this.status = status;
  }
  public String getReason() {
     return reason;
  }
  public void setReason(String reason) {
     this.reason = reason;
  }
}

I cannot modify my TransactionStatus class as this used in many other places.我无法修改我的 TransactionStatus class ,因为它在许多其他地方都使用过。 In Event class if I tried to set @SerializedName("status") and @SerializedName("reason") error is coming as Multiple json fields.在事件 class 中,如果我尝试设置 @SerializedName("status") 和 @SerializedName("reason") 错误将作为多个 json 字段出现。 I want to display my status and reason one level up ie want to get rid of "transaction_status" tag in json response.我想显示我的状态和原因上一级,即想摆脱 json 响应中的“transaction_status”标签。

I guess you're using gson... try with a custom serializer for PaymentExternalView (class containing TransactionStatus member) class.我猜您正在使用 gson ... 尝试使用 PaymentExternalView 的自定义序列化程序(包含 TransactionStatus 成员的类)class。

GsonBuilder gsonBuilder = new GsonBuilder();

JsonSerializer<PaymentExternalView> serializer = ...;  
gsonBuilder.registerTypeAdapter(PaymentExternalView.class, serializer);

Gson customGson = gsonBuilder.create();  
String customJSON = customGson.toJson(value);

Then create json as desired...然后根据需要创建 json ...

JsonSerializer<PaymentExternalView> serializer = new JsonSerializer<>() {  
    @Override
    public JsonElement serialize(PaymentExternalView src, Type typeOfSrc, JsonSerializationContext context) {
        JsonObject json = new JsonObject();
        // ...
        json.addProperty("status", src.getTransactionStatus().getStatus());
        json.addProperty("reason", src.getTransactionStatus().getReason());

        return json;
    }
};

https://futurestud.io/tutorials/gson-advanced-custom-serialization-part-1 https://futurestud.io/tutorials/gson-advanced-custom-serialization-part-1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM