XML deseralizer/serializer

06/27/2016 17:58 Ludder231#1
Hi,

ich möchte gerne eine XML erstellen und auch auslesen. Einlesen klappt ganz gut bis auf eine Sache. Ich möchte mehrere Einträge gleich haben. Ich zeigs mal:

PHP Code:
<Versorgen>
    <
Füttern>
         <
Heu>5</Heu>
         <
Hafer>5</Hafer>
    </
Füttern>
  
     <
Tränken>true</Tränken>
      <
Striegeln>true</Striegeln>

      <
Füttern>
         <
Heu>11</Heu>//Hier muss Füttern nochmal eingetragen werden
         
<Hafer>12</Hafer>
    </
Füttern>

     <
Tränken>true</Tränken>
      <
Striegeln>true</Striegeln>
</
Versorgen
Ich hab die XML mehr oder weniger erstellen können. aber ich glaube ich mache das hier falsch.

PHP Code:
<?xml version="1.0" encoding="utf-8"?>
<Füttern xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <bHeu>true</bHeu>
  <bHafer>true</bHafer>
  <sMengeHeu>auto</sMengeHeu>
  <sMengeHafer>auto</sMengeHafer>
  <bSäugen>true</bSäugen>
</Füttern><?xml version="1.0" encoding="utf-8"?>
<Tränken xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <bTränken>true</bTränken>
</Tränken>
Das Hauptproblem ist eigentlich, dass ich mehrfachnennungen im XML habe... :)
06/27/2016 21:38 YatoDev#2
Ich kann dir keine lösung für dein problem geben aber wenn du vernünftige klassen baust kannst du einfach alles hiermit serialisieren [Only registered and activated users can see links. Click Here To Register...]

Normalerweise macht man das ganze so das man keine doppelten einträge hast.

und bitte lass das mit der hungarian notation
06/28/2016 20:42 Else#3
Quote:
Originally Posted by »FlutterShy™ View Post
Ich kann dir keine lösung für dein problem geben
Dafür ich aber. ;-)

Quote:
Originally Posted by »FlutterShy™ View Post
aber wenn du vernünftige klassen baust kannst du einfach alles hiermit serialisieren [Only registered and activated users can see links. Click Here To Register...]
Muss es gleich völlig oversized sein? Für sein Anwendungszweck wird eine XML-Serialisierung vollkommen reichen.

Quote:
Originally Posted by »FlutterShy™ View Post
Normalerweise macht man das ganze so das man keine doppelten einträge hast.
Wer weiß, wofür es gut ist. Dafür gibt es letzten Endes "Listen". :P

Siehe hier, für die XML-Serialierung mit Liste:
[Only registered and activated users can see links. Click Here To Register...]

Siehe hier, für die XML-Serialisierung:
[Only registered and activated users can see links. Click Here To Register...]

Code:
public static string SerializeToXML<T>(T Content) {
  try {
    using (MemoryStream _ObjectMemoryStream = new MemoryStream()) {
      XmlSerializer _ObjectXmlSerializer = new XmlSerializer(typeof(T));

      _ObjectXmlSerializer.Serialize(_ObjectMemoryStream, Content);
      _ObjectMemoryStream.Position = 0;

      using (StreamReader sr = new StreamReader(_ObjectMemoryStream, Encoding.Default)) {
        return sr.ReadToEnd();
      } // end using
    } // end using
  } catch (Exception Error) {
    return Error.StackTrace;
  } // end try-catch
}

public static T DeserializeFromXML<T>(string Content) {
  try {
    XmlSerializer _ObjectXmlSerializer = new XmlSerializer(typeof(T));

    using (MemoryStream _ObjectMemoryStream = new MemoryStream(Encoding.Default.GetBytes(Content))) {
      return (T)Convert.ChangeType(_ObjectXmlSerializer.Deserialize(_ObjectMemoryStream), typeof(T));
    } // end using
  } catch (Exception Error) {
    throw Error;
  } // end try-catch
}