2017-04-14 6 views
0

ich eine Klasse serialisiert bin versucht, die definiert zwei Date Felder hat:Gson: Serialisierung eine Klasse mit zwei Datumsfelder

import com.google.gson.annotations.Expose; 
import java.util.Date; 

public class DateRange { 
    private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
    @Expose 
    public Date startDate; 
    @Expose 
    public Date endDate; 

    public DateRange(Date startDate, Date endDate) { 
     this.startDate = startDate; 
     this.endDate = endDate; 
    } 
    public DateRange(String startDate, String endDate) throws ParseException{ 
     this.startDate = dateFormat.parse(startDate); 
     this.endDate = dateFormat.parse(endDate); 
    } 
} 

aber mit gson.toJson wird eine Ausnahme geworfen, wo mehrere

import com.google.gson.Gson 

Gson gson = new Gson() 
gson.toJson(new DateRange("2011-11-11", "2012-11-11")) 

Ergebnisse in

java.lang.IllegalArgumentException: class java.text.DecimalFormat declares multiple JSON fields named maximumIntegerDigits 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166) 

Das Problem ist verschärft, wo ich eine habe Klasse ManyDates, die ein Feld mit DateRange sowie ein weiteres Feld mit einem Array von DateRange hat. Ich habe versucht, das Feld, indem als private transient aber kein Glück (auch mit dem Feld als String Typ versucht)

private transient java.text.DecimalFormat maximumIntegerDigits; 

aber das Feld nach wie vor verursacht Probleme mit der Serialisierung. Ich bin mir nicht sicher, woher dieses Feld überhaupt kommt, aber ich vermute, dass eine einfache Lösung einfach unerreichbar ist, die ich gerade nicht sehe.

+0

Das Feld am meisten gehört wahrscheinlich zu 'java.util.Date'. Meine Empfehlung wäre, die Daten als "String" zu serialisieren und zu einem "Date" zu deserialisieren. –

+0

Ich denke, das ist passiert, weil Sie DataRange-Methode und das Argument, das Sie inJson für die zwei Methoden-Signatur gelten, was ist der Punkt der Erstellung von zwei Methoden? –

+0

Ich denke, das ist, weil es versucht, DateFormat zu json zu serialisieren. Markiere es mit Annotation @Transient. –

Antwort

0

In diesem Fall versucht Gson, DateFormat Feld zu serialisieren.

annotieren es nur mit @Transient

Verwandte Themen