xmlns=" wurde nicht erwartet, dass beim Deserialisieren von geschachtelten Klassen

Ich habe ein problem beim Versuch zu serialisieren der Klasse auf einem server zum client zu senden und Deserialisieren auf dem Ziel.

Auf dem server habe ich die folgenden zwei Klassen:

[XmlRoot("StatusUpdate")]
public class GameStatusUpdate
{
    public GameStatusUpdate()
    {}

    public GameStatusUpdate(Player[] players, Command command)
    {
        this.Players = players;
        this.Update = command;
    }

    [XmlArray("Players")]
    public Player[] Players { get; set; }

    [XmlElement("Command")]
    public Command Update { get; set; }
}

und

[XmlRoot("Player")]
public class Player
{
    public Player()
    {}

    public Player(PlayerColors color)
    {
        Color = color;
        ...
    }

    [XmlAttribute("Color")]
    public PlayerColors Color { get; set; }

    [XmlAttribute("X")]
    public int X { get; set; }

    [XmlAttribute("Y")]
    public int Y { get; set; }
}

(Die fehlenden Arten sind alle enums).

Dieser erzeugt die folgenden XML-Serialisierung:

<?xml version="1.0" encoding="utf-16"?>
<StatusUpdate>
  <Players>
    <Player Color="Cyan" X="67" Y="32" />
  </Players>
  <Command>StartGame</Command>
</StatusUpdate>

Auf der client-Seite, ich bin versucht zu Deserialisieren, die in folgenden Klassen:

[XmlRoot("StatusUpdate")]
public class StatusUpdate
{
    public StatusUpdate()
    {

    }

    [XmlArray("Players")]
    [XmlArrayItem("Player")]
    public PlayerInfo[] Players { get; set; }

    [XmlElement("Command")]
    public Command Update { get; set; }
}

und

[XmlRoot("Player")]
public class PlayerInfo
{
    public PlayerInfo()
    {
    }

    [XmlAttribute("X")]
    public int X { get; set; }

    [XmlAttribute("Y")]
    public int Y { get; set; }

    [XmlAttribute("Color")]
    public PlayerColor Color { get; set; }
}

Jedoch die deserializer wirft eine Ausnahme:

There is an error in XML document (2, 2).
<StatusUpdate xmlns=''> was not expected.

Was ich bin fehlt oder falsch??

EDIT:

Auf Wunsch, ich bin auch das hinzufügen von code zum serialisieren und Deserialisieren:

Server:

    public static byte[] SerializeObject(Object obj)
    {
        XmlSerializer xmlSerializer = new XmlSerializer(obj.GetType());
        StringWriter writer = new StringWriter();

        //Clear pre-defined namespaces
        XmlSerializerNamespaces xsn = new XmlSerializerNamespaces();
        xsn.Add("", "");

        xmlSerializer.Serialize(writer, obj, xsn);
        writer.Flush();

        //Send as little-endian UTF-16 string because the Serializer denotes XML as 
        //utf-18 which cannot be easly changed
        UnicodeEncoding encoder = new UnicodeEncoding(false, false);
        return encoder.GetBytes(writer.ToString());
    }

Client:

    public static object DeserializeXml(string xmlData, Type type)
    {
        XmlSerializer xmlSerializer = new XmlSerializer(type);


        StringReader reader = new StringReader(xmlData);
        object obj = xmlSerializer.Deserialize(reader);

        return obj;
    }

Deserialisierung aufgerufen wird, mit

StatusUpdate update = (StatusUpdate) Util.DeserializeXml(xmlData, typeof (StatusUpdate));
  • Die erste Sache, die Sie fehlen nicht und zeigen Sie uns den code, die Sie verwenden, zu Deserialisieren.
  • Dieses ist noch unvollständig. Wo kommt der string xmlData kommen, wenn es serialisiert bytes am anderen Ende? Ich wäre nicht überrascht, wenn das ist tatsächlich ein encoding-Problem. Und warum hat Ihr Kommentar erwähnen "utf-18" wenn es gibt keine solche Sache?
  • In meinem Fall war es wegen der falschen Deklaration von XmlSerializer. So überprüfen Sie das auch.
InformationsquelleAutor Mavrik | 2010-05-09
Schreibe einen Kommentar