예제 #1
0
        /// <summary>
        /// Serializes the given <see cref="Board"/> into the stream.
        /// </summary>
        /// <param name="serializationStream">The stream to serialize the given <see cref="Board"/>.</param>
        /// <param name="graph">A <see cref="Board"/> object to serialize.</param>
        /// <exception cref="ArgumentNullException">Thrown if either <paramref name="serializationStream"/> or <paramref name="graph"/> are <code>null</code>.</exception>
        /// <exception cref="ArgumentException">Thrown if <paramref name="graph"/> is not a <see cref="Board"/>.</exception>
        public void Serialize(Stream serializationStream, object graph)
        {
            graph.CheckParameterForNull("graph");
            serializationStream.CheckParameterForNull("serializationStream");

            var board = graph as Board;

            if (board == null)
            {
                throw new ArgumentException("The given object must be a Board.", "graph");
            }

            var document = new XmlDocument();

            document.AppendChild(document.CreateElement("Board"));

            foreach (var move in board.MoveHistory)
            {
                var moveNode   = document.DocumentElement.AppendChild(document.CreateElement("Move"));
                var sourceNode = moveNode.AppendChild(document.CreateElement("Source"));
                BoardFormatter.AddCoordinate(sourceNode, move.Source);
                var destinationNode = moveNode.AppendChild(document.CreateElement("Destination"));
                BoardFormatter.AddCoordinate(destinationNode, move.Destination);
            }

            document.Save(serializationStream);
        }
예제 #2
0
        /// <summary>
        /// Returns a <see cref="Board"/> object based on the
        /// serialized data.
        /// </summary>
        /// <param name="serializationStream">A serialized version of a <see cref="Board"/>.</param>
        /// <returns>A new <see cref="Board"/> object.</returns>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="serializationStream"/> is <code>null</code>.</exception>
        /// <exception cref="InvalidMoveException">Thrown if a move error occurred during deserialization.</exception>
        /// <exception cref="XmlException">Thrown if an XML error occurred during deserialization.</exception>
        public object Deserialize(Stream serializationStream)
        {
            serializationStream.CheckParameterForNull("serializationStream");

            var board = new Board();

            var document = new XmlDocument();

            document.Load(serializationStream);

            foreach (XmlNode moveNode in document.DocumentElement.ChildNodes)
            {
                board.MovePiece(BoardFormatter.GetCoordinate(moveNode["Source"]),
                                BoardFormatter.GetCoordinate(moveNode["Destination"]));
            }

            return(board);
        }