मुझे सर्वर पर कक्षा को क्रमबद्ध करने का प्रयास करते समय समस्या है, इसे क्लाइंट को भेज दें और deserialize गंतव्य पर है।xmlns = '' की उम्मीद नहीं की गई थी जब नेस्टेड कक्षाओं को deserializing
सर्वर मैं निम्नलिखित दो वर्गों है पर:
[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; }
}
और
[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; }
}
(लापता प्रकार सभी enums हैं)।
यह क्रमबद्धता पर निम्न XML उत्पन्न करता है:
[XmlRoot("StatusUpdate")]
public class StatusUpdate
{
public StatusUpdate()
{
}
[XmlArray("Players")]
[XmlArrayItem("Player")]
public PlayerInfo[] Players { get; set; }
[XmlElement("Command")]
public Command Update { get; set; }
}
और
[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; }
}
:
<?xml version="1.0" encoding="utf-16"?>
<StatusUpdate>
<Players>
<Player Color="Cyan" X="67" Y="32" />
</Players>
<Command>StartGame</Command>
</StatusUpdate>
ग्राहक पक्ष पर, मैं deserialize करने के लिए है जो निम्न वर्गों में प्रयास कर रहा हूँ हालांकि, deserializer एक अपवाद फेंकता है:
There is an error in XML document (2, 2).
<StatusUpdate xmlns=''> was not expected.
मुझे क्या याद आ रही है या गलत कर रहा है?
संपादित करें:
अनुरोध मैं भी क्रमानुसार करने के लिए इस्तेमाल किया कोड और deserialize जोड़ रहा पर:
सर्वर:
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());
}
ग्राहक:
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;
}
Deserialization साथ शुरू हो जाती है
StatusUpdate update = (StatusUpdate) Util.DeserializeXml(xmlData, typeof (StatusUpdate));
पहली बात भूल रहे हैं हमें कोड आप deserialize करने के लिए प्रयोग कर रहे हैं दिखा रहा है। –
यह अभी भी अपूर्ण है। स्ट्रिंग 'xmlData' कहां से आती है जब इसे दूसरे छोर पर बाइट्स के रूप में क्रमबद्ध किया जाता है? अगर यह वास्तव में एक एन्कोडिंग मुद्दा है तो मुझे आश्चर्य नहीं होगा। और जब आपकी कोई ऐसी चीज नहीं है तो आपकी टिप्पणी "utf-18" का उल्लेख क्यों करती है? – Aaronaught
मेरे मामले में, यह 'XmlSerializer' की गलत घोषणा के कारण था। तो उसे भी जांचें। – Mangesh