[Java] Xml-Daten-Schnittstelle zwischen Java und C# für HashMap "selber" serialisiern

Palladin007

assimiliert
[Java] Xml-Daten-Schnittstelle zwischen Java und C# für HashMap "selber" serialisiern

Moin,

ich brauche eine Daten-Verbindung zwischen Java und C#. Was bietet sich da mehr an als XML?

Also hab ich mir folgende Methoden geschrieben:

PHP:
    public static boolean Serialize(Object obj, String FilePath)
    {
        XMLEncoder enc = null;

        try
        {
            enc = new XMLEncoder( new FileOutputStream(FilePath) );
            enc.writeObject(obj);
            return true;
        }
        catch (Exception e)
        {
            return false;
        }
        finally
        {
            if (enc != null) enc.close();
        }
    }
    public static Object Deserialize(String FilePath)
    {
        XMLDecoder dec = null;

        try
        {
            dec = new XMLDecoder(new FileInputStream(FilePath));
            return dec.readObject();
        }
        catch (Exception e)
        {
            return null;
        }
        finally
        {
            if (dec != null) dec.close();
        }
    }

Das hier sind die Test-Zeilen:

PHP:
        HashMap<Integer, Rule> rules = new HashMap<>();
        
        rules.put(1, new Rule(1,1,"1"));
        rules.put(2, new Rule(2,1,"2"));
        rules.put(3, new Rule(3,1,"3"));
        
        Serialize(rules, "asdf.xml");

Und das hier ist die Klasse Rule:

PHP:
@XmlRootElement(name="Regel")
public class Rule
{
    private int ID;
    public int getID() { return this.ID; }
    
    private int Severity;
    public int getSeverity() { return this.Severity; }

    private String RuleText;
    public String getRuleText() { return this.RuleText; }
        
    public Rule() { }
    public Rule(int ID, String RuleText)
    {
        this(ID, 0, RuleText);
    }
    public Rule(int ID, int Severity, String RuleText)
    {
        this.ID = ID;
        this.Severity = Severity < 0 ? 0 : (Severity > 10 ? 10 : Severity);
        this.RuleText = RuleText;
    }
}

Allerdings ergibt das nur folgende Datei:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_21" class="java.beans.XMLDecoder">
 <object class="java.util.HashMap">
  <void method="put">
   <int>1</int>
   <object class="me.SirPalladin.PlayerData.Rule"/>
  </void>
  <void method="put">
   <int>2</int>
   <object class="me.SirPalladin.PlayerData.Rule"/>
  </void>
  <void method="put">
   <int>3</int>
   <object class="me.SirPalladin.PlayerData.Rule"/>
  </void>
 </object>
</java>

Außerdem hab ich das Problem, dass die XML-Datei auch von C# verstanden werden soll.


Daher meine Frage, wie kann ich selber fest legen, welches Attribut unter welchem Namen mit welchem Wert geschrieben wird?

In C# musste ich dafür nur das Interface IXmlSerializable implementieren, bekam dann drei Methoden und in zwei davon konnte ich genau fest legen, wie was geschrieben oder gelesen wird.


Gibt es etwas vergleichbares auch in Java?


Gruß
 
AW: [Java] Xml-Daten-Schnittstelle zwischen Java und C# für HashMap "selber" serialis

Ich hab hier mal in C# eine Datei erstellen lassen, wie ich sie am besten brauchen könnte, Attribut-Namen sind natürlich noch änderbar.

Code:
<?xml version="1.0"?>
<Regel-Sammlung>
  <Regel>
    <Nummer>
      <int>1</int>
    </Nummer>
    <Schwere>
      <int>1</int>
    </Schwere>
    <Text>
      <string>1</string>
    </Text>
  </Regel>
</Regel-Sammlung>

Wie kann ich das in Java so hin bekommen?


Gruß
 
Zuletzt bearbeitet:
AW: [Java] Xml-Daten-Schnittstelle zwischen Java und C# für HashMap "selber" serialis

Du überschätzt meine kaum vorhandenen JAVA-Kenntnisse. Ehrlich gesagt interessiere ich mich nicht sonderlich fürs Programmieren.
 
AW: [Java] Xml-Daten-Schnittstelle zwischen Java und C# für HashMap "selber" serialis

Deshalb steht es ja auch in einem Forum :p


Ich hatte nur gehofft, dass du mir helfen kannst, da du heute früh ja online warst ^^
 
AW: [Java] Xml-Daten-Schnittstelle zwischen Java und C# für HashMap "selber" serialis

Hallo,

also in Java gibts da auch verschiedene Wege. Mein Favorit ist DOM.
Einfach mal nach Suchen, ist gut dokumentiert und ein ziemlich mächtiges Werkzeug.
 
AW: [Java] Xml-Daten-Schnittstelle zwischen Java und C# für HashMap "selber" serialis

Ich werds mir mal anschauen, danke.


Bei größeren Datensätzen bin ich aber mittlerweile dazu übergegangen, einfach binär zu serialisieren, wenn ich sie sowieso nicht in C# ansprechen muss.

Bei dem, was ich mit C# kombinieren wollte, hab ich das aktuelle Problem jetzt damit gelöst, dass ich die Datensätze simpel durch das Zeichen | getrennt, in eine Datei geschrieben habe.


Aber ich denke mal, wenn das mit XML gut funktioniert, dann lass ich die großen Datensätze via XML speichern und kann sie in C# bearbeiten.
 
AW: [Java] Xml-Daten-Schnittstelle zwischen Java und C# für HashMap "selber" serialis

Was genau hast du überhaupt vor? Sollen die Daten zur Laufzeit ausgetauscht werden oder läuft nur eins der Programme? Wie viele Daten müssen wie oft ausgetauscht werden. Sind die auszutauschenden Daten (deine "Rules") immer gleich aufgebaut?

XML ist ja nicht die Allerweltslösung. Es gibt noch eine ganze Menge anderer sehr guter Möglichkeiten, Schnittstellen zwischen zwei Programmen zu gestalten. XML ist oft übertrieben, JSON reicht eventuell auch schon aus - um nur ein Beispiel zu nennen.
 
AW: [Java] Xml-Daten-Schnittstelle zwischen Java und C# für HashMap "selber" serialis

Ich baue ein Plugin für einem Minecraft Bukkit-Server.

Die Daten für jeden Spieler sollen jeweils in einer extra Datei gespeichert werden.
Damit möglichst wenig Daten im RAM liegen, hab ich das so gemacht, dass beim ersten Anfordern der Daten die im RAM bleiben, bis der Spieler offline geht.
Eine Datenbank würde sich dafür ja anbieten, bloß hab ich darauf keine Lust und die Menge der Daten ist nicht groß genug, dass sich das auch lohnen würde.


Die Verbindung mit C# brauche ich deshalb, weil ich noch ein kleines Tool schreiben wollte, das einerseits die Spielerdaten übersichtlich bearbeiten kann, als auch Konfigurationsdaten bearbeiten kann.
Deshalb C#, weil ich keine Lust hab, groß in Java einzusteigen, und auch nur das Plugin Java sein muss, weil Bukkit es sonst nicht versteht.



Die Regeln sind eben Regeln im Spiel, wenn jemand dagegen verstehst, wird eine Verwarnung ausgegeben und mit der Regel-Nummer wird das dann verknüpft.
Und solche Verwarnungen, oder das erste Login-Datum, gehören dann z.B. zu den Spieler-Daten, die in jeder Datei liegen.
 
Oben