File: AuthoringOM\Serializer\XmlDocumentSurrogate.cs
Project: ndp\cdf\src\WF\Common\System.Workflow.ComponentModel.csproj (System.Workflow.ComponentModel)
namespace System.Workflow.ComponentModel.Serialization
{
    using System;
    using System.Xml;
    using System.Runtime.Serialization;
    using System.Reflection;
    using System.IO;
    using System.Runtime.Serialization.Formatters.Binary;
 
    #region XmlDocumentSurrogate
    internal sealed class XmlDocumentSurrogate : ISerializationSurrogate
    {
        internal XmlDocumentSurrogate() { }
        void ISerializationSurrogate.GetObjectData(object obj, SerializationInfo info, StreamingContext context)
        {
            XmlDocument doc = obj as XmlDocument;
            if (doc == null)
                throw new ArgumentException(SR.GetString(SR.Error_InvalidArgumentValue), "obj");
 
            info.AddValue("innerXml", doc.InnerXml);
            info.SetType(typeof(XmlDocumentReference));
        }
        object ISerializationSurrogate.SetObjectData(object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector)
        {
            return null;
        }
 
        #region XmlDocumentReference
        [Serializable]
        private sealed class XmlDocumentReference : IObjectReference
        {
            private string innerXml = string.Empty;
 
            Object IObjectReference.GetRealObject(StreamingContext context)
            {
                XmlDocument doc = new XmlDocument();
 
                if (!string.IsNullOrEmpty(this.innerXml))
                    doc.InnerXml = this.innerXml;
 
                return doc;
            }
        }
        #endregion
    }
    #endregion
}