Frage

Ich habe diesen Code:

...
request data = new request(); 
data.username = formNick; 
xml = data.Serialize();
...

[System.Serializable] 
public class request 
{ 
   public string username; 
   public string password;

   static XmlSerializer serializer = new XmlSerializer(typeof(request));
   public string Serialize() 
   { 
      StringBuilder builder = new StringBuilder(); 
      XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
settings.Encoding = Encoding.UTF8;
      serializer.Serialize(
         System.Xml.XmlWriter.Create(builder, settings ), 
         this); 

      return builder.ToString(); 
   } 
   public static request Deserialize(string serializedData) 
   { 
      return serializer.Deserialize(new StringReader(serializedData)) as request; 
   } 
}

Ich möchte Attribute zu einigen Knoten hinzuzufügen und einige Unterknoten zu erstellen. Auch, wie zum Parsen von XML wie folgt aus:

<answer>
  <player id="2">
    <coordinate axis="x"></coordinate>
    <coordinate axis="y"></coordinate>
    <coordinate axis="z"></coordinate>
    <action name="nothing"></action>
  </player>
  <player id="3">
    <coordinate axis="x"></coordinate>
    <coordinate axis="y"></coordinate>
    <coordinate axis="z"></coordinate>
    <action name="boom">
      <1>1</1>
      <2>2</2>
    </action>
  </player>
</answer>

Es ist nicht eine XML-Datei, es ist eine Antwort von HTTP-Server.

War es hilfreich?

Lösung

Am besten wäre es, wenn Sie eine XSD-Datei, die den XML haben werden Sie vom Server empfangen werden. Sie könnten dann mit den entsprechenden .NET-Attributen ihnen das xsd.exe Programm zu produzieren .NET-Klassen verwenden. Sie könnten dann nur XmlSerializer.Deserialize verwenden.

Ich werde versuchen, eine solche Klasse von Hand für Sie zu erstellen. Dies wird ein kurzer Versuch sein, und kann falsch sein (ich muss die Arbeit gehen!)


Versuchen Sie dies und sehen, ob es funktioniert.

using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;


[XmlRoot("answer")]
public class Answer
{
    [XmlElement]
    public List<Player> Players { get; set; }
}

public class Player
{
    [XmlAttribute("id")]
    public int ID { get; set; }

    [XmlElement]
    public List<Coordinate> Coordinates { get; set; }

    [XmlElement("action")]
    public PlayerAction Action { get; set; }
}

public class PlayerAction
{
    [XmlAttribute("name")]
    public string Name { get; set; }

    [XmlAnyElement]
    public XmlElement[] ActionContents { get; set; }
}

public enum Axis
{
    [XmlEnum("x")]
    X,
    [XmlEnum("y")]
    Y,
    [XmlEnum("z")]
    Z
}

public class Coordinate
{
    [XmlAttribute("axis")]
    public Axis Axis { get; set; }

    [XmlText]
    public double Value { get; set; }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top