Object zu String schlägt fehl

Gachl

Mitglied
Hallo!

Ich stehe momentan vor einem seltsamen Problem auf das ich keine Lösung finden konnte:

Mittels gson serialisiere und deserialisiere ich eine Klasse (Java -> Java, die gleiche Binary und auch die gleiche Klasse). Nun habe ich in der Klasse einen
Java:
public Object payload;
welches ich vor dem serialisieren setze:
Java:
payload = "Ich bin ein String";
nach dem deserialisieren versuche ich auf den String zuzugreifen:
Java:
String thePayload = (String)payload;
oder
Java:
String thePayload = payload.toString();
Beide Varianten funktionieren nicht. Bei der Ersten bekomme ich den Fehler, dass ein Object nicht zu einem String konvertiert werden kann. Bei der zweiten Variante bekomme ich einen String mit dem Inhalt "java.lang.Object@b9b618".

Was kann ich tun, damit ich den String wiederbekomme?
 

eRaaaa

Top Contributor
Mal doof gefragt: Hat es einen bestimmten Grund warum du payload nicht als String deklarierst in deiner java-Klasse? Dann sollte gson da auch etwas vernünftiges draus machen?!
 

Gachl

Mitglied
Ja, einen Grund hat es. Ich kommuniziere mit der Klasse zwischen Client und Server und möchte Variabel bleiben, was für Objekte ich übertrage. Das können HashMaps sein, Stacks, Integers, bool, String, was auch immer. Ich möchte nicht für jeden Datentyp ein eigenes Feld haben müssen, darum habe ich hier Object genommen um generisch zu bleiben.
 

Gachl

Mitglied
Java:
import com.google.gson.annotations.SerializedName;
import java.util.HashMap;

public class Command {
    @SerializedName("ID")
    private int id;
    @SerializedName("Action")
    private Action action;
    @SerializedName("Params")
    private HashMap<Param, Object> params;

    public Command()
    {
        id = Main.Instance().GetNextCmdId();
        params = new HashMap<Param, Object>();
    }

    public int GetId()
    {
        return id;
    }

    public void SetParam(Param param, Object value)
    {
        if (params.containsKey(param))
            return;
        params.put(param, value);
    }

    public Action GetAction()
    {
        return action;
    }

    public Object GetParam(Param param)
    {
        if (!params.containsKey(param))
            return null;
        return params.get(param);
    }

    public <T> T GetParam(Param param, Class<T> classOfT)
    {
        return (T)GetParam(param);
    }
}
Das payload ist einfach ein Element in params. Ich setze per Command.SetParam(Param.Irgendwas, txtTextFeld.GetText()); einen Wert (als Payload) und serialisiere die Klasse mit gson, schicke sie an den Server oder den Client und deserialisiere sie dort wieder.
Java:
Command.GetParam(Param.Irgendwas, String.class);
gibt mir eben den Fehler, dass ein Object nicht zu einem String gecastet werden kann und
Java:
Command.GetParam(Param.Irgendwas).toString();
gibt mir nicht den gewünschten String sondern eben die Objektinstanz als Namen (java.lang.Object@b9b618).

Senden/Empfangen:
Java:
// Senden
Gson gson = new Gson();
String json = gson.toJson(cmd);
Main.SendOnSocket(clientConnection, json); // Sendet und flusht

// Empfangen
Gson gson = new Gson();
String receive = in.readLine(); // in = BufferedReader des Sockets.
Command cmd = (Command) gson.fromJson(receive, Command.class);
 
S

SlaterB

Gast
ist es garantiert das richtige Command, stimmt die Id? wird die von dir beliebig vergeben?

verwende erstmal keine komplizierte Map, sondern übertrage einen Test-String in einem String-Attribut, klappt das?
als nächstes ein Object-Attribut, gehts da?

generell solltest du versuchen, Konventionen einzuhalten, Methoden und Variablen klein schreiben!
 
T

Tomate_Salat

Gast
als nächstes ein Object-Attribut, gehts da?

Genau das hatte ich zuhause auch schon probiert und ich bin auf viele Schwierigkeiten dabei gestoßen. Ich versuche das Momentan so zu lösen:

anstatt [c]Object[/c] nutze ich [c]String[/c]. Warum? Ich lasse mir einfach aus dem "Objekt" ein JSON-String erzeugen und speichere diesen ab. Ist noch unausgereift, aber so ist derzeit meine idee:

Java:
import com.google.gson.Gson;


public class GSONDemo
{
	public static Gson GSON	= new Gson();
	
	public static void main(String[] args)
	{
		DClass cl	= new DClass("hallo");
		
		String json	= GSON.toJson(cl);
		
		System.out.println("JSON: " + json);
		
		DClass rc	= GSON.fromJson(json, DClass.class);
		
		String data	= (String)rc.getObject();
		
		System.out.println("String-Objekt: " + data);
	}
}


class DClass
{
	private String value, clazz;
	
	public DClass()
	{
	}
	
	public DClass(Object obj)
	{
		value	= GSONDemo.GSON.toJson(obj);
		clazz	= obj.getClass().getName();
	}
	
	public String getValue()
	{
		return value;
	}
	
	public String getClazz()
	{
		return clazz;
	}
	
	public Object getObject()
	{
		try
		{
			Class cl	= Class.forName(clazz);
			return GSONDemo.GSON.fromJson(value, cl);
		} 
		catch (ClassNotFoundException e)
		{
			e.printStackTrace();
			return null;
		}
	}
}

Ausgabe:
Code:
JSON: {"value":"\"hallo\"","clazz":"java.lang.String"}
String-Objekt: hallo

MFG

Tomate_Salat
 

eRaaaa

Top Contributor
Normal brauchst du da nie selbst mit Reflection rummachen, das macht gson schon selbst! Du musst ihm halt nur genau sagen was du machen willst! Am Besten mal den guide durchlesen.
In dem Beispiel von Tomate würde sich evtl. so etwas anbieten ???:L
Java:
class DClass<T> {

	private T value;

	public DClass() {
	}

	public DClass(T obj) {
		this.value = obj;
	}

	public T getValue() {
		return value;
	}

	@Override
	public String toString() {
		return value.toString();
	}
}
(Klasse enthält keine zusätzlichen Infos!! ) Dafür erhält gson ein TypeToken!:

Java:
	public static void main(String[] args) {
		Gson GSON = new Gson();

		Type type = new TypeToken<DClass<String>>() {}.getType();

		DClass<String> cl = new DClass<String>("hallo");

		String json = GSON.toJson(cl, type);

		System.out.println("JSON: " + json);

		DClass<String> rc = GSON.fromJson(json, type);

		System.out.println("value-Objekt: " + rc.getValue());
	}
 

Gachl

Mitglied
ist es garantiert das richtige Command, stimmt die Id? wird die von dir beliebig vergeben?
Ja, es ist das richtige Objekt, die Id ist an dieser Stelle irrelevant.

anstatt [c]Object[/c] nutze ich [c]String[/c]
Das ist mein momentaner Workaround, alles in einen String zu tun und ihn dann einfach zu Integers und booleans zu konvertieren. Hier ist aber das Problem, dass ich keine Stacks<> oder HashMaps<> übermitteln kann, weil es auf Strings beschränkt ist. Wenn es ein Objekt wäre könnte ich einfach meine HashMap der params HashMap hinzufügen.

eRaaaa: das wäre eine Lösung, wenn auch im Gegensatz [c]Object[/c] zu verwenden etwas komplexer. Eine Lösung mit Object wäre ideal imo, aber wenn ich keine Lösung finde, werde ich es warscheinlich so machen. Danke!
 
T

Tomate_Salat

Gast
Das ist mein momentaner Workaround, alles in einen String zu tun und ihn dann einfach zu Integers und booleans zu konvertieren. Hier ist aber das Problem, dass ich keine Stacks<> oder HashMaps<> übermitteln kann, weil es auf Strings beschränkt ist. Wenn es ein Objekt wäre könnte ich einfach meine HashMap der params HashMap hinzufügen.

Sicher das du mich richtig verstanden hast? Ich meinte: Du willst im Objekt etwas unbekanntes speichern, sei es String, Hashmap oder ieine x-Belibige Referenz. Egal. Dieses Objekt lässt du mittels gson in ein json string umwandeln und übergibst diesen. Ich meine nicht, dass du das tun sollst: String.valueOf(Object).

Durch mein gepostetes Beispiel, sollte das eigentl. klar geworden sein :-/
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
HolyFUT JSON String in Java Object schreiben - Anführungszeichen rauskriegen? Java Basics - Anfänger-Themen 17
R Compiler-Fehler JTable mit XML befüllen | The constructor JTable(Object[], String[]) is undefined Java Basics - Anfänger-Themen 10
T Object zu Char zu String Java Basics - Anfänger-Themen 6
R The method printf(String, Object[]) in the type printStrem in not applicable for the arguments ... Java Basics - Anfänger-Themen 3
N Object mit String ansprechen Java Basics - Anfänger-Themen 7
T Object[][] to String[][] Java Basics - Anfänger-Themen 8
T HashMap<String,Object> Werte auslesen Java Basics - Anfänger-Themen 5
D Object -> String Java Basics - Anfänger-Themen 6
M String to Object Java Basics - Anfänger-Themen 15
N HashMap<String, Object> bei jre4 Java Basics - Anfänger-Themen 3
K Datentypen Object in 2-dimensionales String Array zurückwandeln Java Basics - Anfänger-Themen 14
M string in ein xml-object umwandeln Java Basics - Anfänger-Themen 11
M Frage zur Methode Action.putValue(String,Object) Java Basics - Anfänger-Themen 5
A Object -> String mit valueOf, toString oder cast ? Java Basics - Anfänger-Themen 6
S JSON String in Object umwandeln Java Basics - Anfänger-Themen 3
L Object[] in String[] casten Java Basics - Anfänger-Themen 7
B String.equals(Object) anstatt "=" Java Basics - Anfänger-Themen 3
G Typkonvertierung - String zu Object Java Basics - Anfänger-Themen 8
N Wie caste ich ein Object in einen String? Java Basics - Anfänger-Themen 7
S welche collection ? String und object Java Basics - Anfänger-Themen 5
T Object[] zu String[] casten? Java Basics - Anfänger-Themen 3
P Casting von Object zu (String || Integer) Java Basics - Anfänger-Themen 8
T String kein Object? Java Basics - Anfänger-Themen 7
N Object to String Java Basics - Anfänger-Themen 5
T Object[][] in String Java Basics - Anfänger-Themen 2
H Object nach String umwandeln Java Basics - Anfänger-Themen 2
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
J neues Object (JLabel) vorab zum Layout hinzufügen , Location setzen, etc? Java Basics - Anfänger-Themen 2
I JSON - cannot deserialize from Object value Java Basics - Anfänger-Themen 16
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
H What is the Life Cycle of an Object Created Within/Outside of a Servlet? Will that item be destroyed after the session ends? Java Basics - Anfänger-Themen 1
thobren Object[][] Java Basics - Anfänger-Themen 8
B JaxB - Property vom Typ Object und LocalDateTime speichern? Java Basics - Anfänger-Themen 0
S Arraylist<Object> mit verschiedenen Objects ausgeben Java Basics - Anfänger-Themen 3
N extends und super vs new object Java Basics - Anfänger-Themen 4
I JaxB und Klasse "Object" ? Java Basics - Anfänger-Themen 7
D Klassen undefined for the type 'object' Java Basics - Anfänger-Themen 2
B JaxB - speichern vom Typ "Object" Java Basics - Anfänger-Themen 8
P Variablen HttpResponse.getBody() wird automatisch org.json Object und kann nicht zu json.simple Object gecastet werden? Java Basics - Anfänger-Themen 7
M this.object in einer parameterlosen Methode verwenden Java Basics - Anfänger-Themen 3
M Java Klasse Object Java Basics - Anfänger-Themen 5
G Java Object value und entity? Java Basics - Anfänger-Themen 2
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
I Object-Oriented Programming, Objekt erzeugen Java Basics - Anfänger-Themen 1
P Zugreifen auf Object[] Java Basics - Anfänger-Themen 4
B if(object== null) abkürzen? Java Basics - Anfänger-Themen 6
A Object to Map Java Basics - Anfänger-Themen 2
D Object in ArrayList ausgeben Java Basics - Anfänger-Themen 24
L Input/Output Datei Object aus resources Java Basics - Anfänger-Themen 1
T HashSet in List-Object Java Basics - Anfänger-Themen 5
H Datentypen for(typ a : b) nur typ Object möglich ? Java Basics - Anfänger-Themen 2
J Compiler-Fehler Fehler bei Vektor (E extends Object declared in class Vector) Java Basics - Anfänger-Themen 9
Yamie ArrayList<Object> als Liste von Strings ausgeben? Java Basics - Anfänger-Themen 15
F Methoden Object.clone() Java Basics - Anfänger-Themen 1
A Probleme beim Methodenaufruf von Object[] ! Java Basics - Anfänger-Themen 12
J Methoden Doppelt verkettete Liste remove(Object) Java Basics - Anfänger-Themen 8
S Methoden equals(object o) / toString Java Basics - Anfänger-Themen 15
A JavaScript Object Notation einbinden mittels Maven Java Basics - Anfänger-Themen 7
F Unique Object Java Basics - Anfänger-Themen 3
GreyFox Object dynamisch mit werten versehen. Java Basics - Anfänger-Themen 4
Z Object Kreis am Frame abprallen lassen! Java Basics - Anfänger-Themen 12
O Object Java Basics - Anfänger-Themen 4
O nullpointerExce. Gui Object weitergabe Java Basics - Anfänger-Themen 12
P Variablen generic type variablen in object array Java Basics - Anfänger-Themen 1
K Selbst renderndes Object auf null setzen Java Basics - Anfänger-Themen 1
K Methoden Probleme mit LinkedList.remove(object) Java Basics - Anfänger-Themen 1
J Object bestimmter Klasse Java Basics - Anfänger-Themen 3
F Object mit zwei Entities Java Basics - Anfänger-Themen 3
B Map, basic types & Object Java Basics - Anfänger-Themen 5
P Auf Object in Array Methode anwanden Java Basics - Anfänger-Themen 2
S Object Array Length via Konstruktor Java Basics - Anfänger-Themen 5
B Date Object mit Millisekunden Ausgabe Java Basics - Anfänger-Themen 8
V Object in double? Java Basics - Anfänger-Themen 3
B Object in Array nach Prüfung löschen Java Basics - Anfänger-Themen 13
A Applet mit Object-Tags einbinden. Java Basics - Anfänger-Themen 3
A If object != null funktioniert nicht Java Basics - Anfänger-Themen 2
B func(Object ....args) korrekt weitergeben Java Basics - Anfänger-Themen 4
M Object people[][] Daten hinzufügen Java Basics - Anfänger-Themen 3
T Input/Output Object Streams Java Basics - Anfänger-Themen 6
T Object in Array Java Basics - Anfänger-Themen 3
H Object an methode Java Basics - Anfänger-Themen 4
W Compiler-Fehler "Could not reserve enough space for object heap"... und dann raucht das Programm ab Java Basics - Anfänger-Themen 3
D Datentyp Object Java Basics - Anfänger-Themen 2
B Object "Method" in TreeSet, Fehler beim Vergleichen/Comparable Java Basics - Anfänger-Themen 9
L Datentypen Object zu double zu int konvertieren Java Basics - Anfänger-Themen 6
S Object Initialisierung Java Basics - Anfänger-Themen 7
H Object in einem .jar-File einlesen Java Basics - Anfänger-Themen 3
D Object oder Primitiv Java Basics - Anfänger-Themen 10
E Object in eigene Klasse umwandeln? Java Basics - Anfänger-Themen 7
W Main-method in Object-classes Java Basics - Anfänger-Themen 5
algebraiker TreeMap<Date,Object> navigieren? Java Basics - Anfänger-Themen 24
E Equals-Methode auf Class-Object Java Basics - Anfänger-Themen 17
C Typen aus List<Object[]> ändern Java Basics - Anfänger-Themen 7
C JComboBox setSelectedItem(Object) Problem Java Basics - Anfänger-Themen 5
B Methoden object = this; Java Basics - Anfänger-Themen 4
S Object Member<T> Klasse Java Basics - Anfänger-Themen 5
M Methode von einem Object überschreiben Java Basics - Anfänger-Themen 5
S Collections Aus Set<Object> bestimmte Typen entfernen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben