public Draft ToEntity()
        {
            var draft = new Draft
            {
                Id = Id,
                Title = Title,
                Body = Body,
                PublishedBody = PublishedBody,
                Type = Type,
                ItemIsPublic = ItemIsPublic,
                ItemCreatedDateTime = ItemCreatedDateTime,
                ItemRevisionCount = ItemRevisionCount,
                LastModifiedDateTime = LastModifiedDateTime,
                Comment = Comment,
                CurrentRevisionNo = CurrentRevisionNo,
            };

            if (!string.IsNullOrWhiteSpace(Author))
            {
                var xmlAuthor = new XmlDocument();
                xmlAuthor.LoadXml(Author);
                var jsonAuthor = Regex.Replace(JsonConvert.SerializeXmlNode(xmlAuthor), "(?<=\")(@)(?!.*\":\\s )", "",
                    RegexOptions.IgnoreCase);
                var jObjectAuthor = JObject.Parse(jsonAuthor)["Author"];
                var author = JsonConvert.DeserializeObject<User>(jObjectAuthor.ToString());
                draft.Author = author;
            }
            else
            {
                draft.Author = User.Unknown;
            }

            if (!string.IsNullOrWhiteSpace(Editor))
            {
                var xmlEditor = new XmlDocument();
                xmlEditor.LoadXml(Editor);
                var jsonEditor = Regex.Replace(JsonConvert.SerializeXmlNode(xmlEditor), "(?<=\")(@)(?!.*\":\\s )", "",
                    RegexOptions.IgnoreCase);
                var jObjectEditor = JObject.Parse(jsonEditor)["Editor"];
                var editor = JsonConvert.DeserializeObject<User>(jObjectEditor.ToString());
                draft.Editor = editor;
            }
            else
            {
                draft.Editor = User.Unknown;
            }

            if (!string.IsNullOrWhiteSpace(Tags))
            {

                var xmlTags = new XmlDocument();
                xmlTags.LoadXml(Tags);
                var jsonTags = Regex.Replace(JsonConvert.SerializeXmlNode(xmlTags), "(?<=\")(@)(?!.*\":\\s )", "",
                    RegexOptions.IgnoreCase);
                var jObjectTags = JObject.Parse(jsonTags)["Tags"]["Tag"];
                if (jObjectTags.Type == JTokenType.Array)
                {
                    var tags = JsonConvert.DeserializeObject<IEnumerable<ItemTag>>(jObjectTags.ToString());
                    foreach (var tag in tags)
                    {
                        draft.ItemTags.Add(tag);
                    }
                }
                else
                {
                    var tag = JsonConvert.DeserializeObject<ItemTag>(jObjectTags.ToString());
                    draft.ItemTags.Add(tag);
                }
            }

            if (!string.IsNullOrWhiteSpace(Collaborators))
            {

                var xmlCollaborators = new XmlDocument();
                xmlCollaborators.LoadXml(Collaborators);
                var jsonCollaborators = Regex.Replace(JsonConvert.SerializeXmlNode(xmlCollaborators),
                    "(?<=\")(@)(?!.*\":\\s )", "", RegexOptions.IgnoreCase);
                var jObjectCollaborators = JObject.Parse(jsonCollaborators)["Collaborators"]["Collaborator"];
                if (jObjectCollaborators.Type == JTokenType.Array)
                {
                    var collaborators = JsonConvert.DeserializeObject<IEnumerable<Collaborator>>(jObjectCollaborators.ToString());
                    foreach (var collaborator in collaborators)
                    {
                        draft.AddCollaborator(collaborator);
                    }
                }
                else
                {
                    var collaborator = JsonConvert.DeserializeObject<Collaborator>(jObjectCollaborators.ToString());
                    draft.AddCollaborator(collaborator);
                }
            }

            return draft;
        }
        public Draft ToEntity()
        {
            var draft = new Draft
            {
                Id                   = Id,
                Title                = Title,
                Body                 = Body,
                PublishedBody        = PublishedBody,
                Type                 = Type,
                ItemIsPublic         = ItemIsPublic,
                ItemCreatedDateTime  = ItemCreatedDateTime,
                ItemRevisionCount    = ItemRevisionCount,
                LastModifiedDateTime = LastModifiedDateTime,
                Comment              = Comment,
                CurrentRevisionNo    = CurrentRevisionNo,
            };

            if (!string.IsNullOrWhiteSpace(Author))
            {
                var xmlAuthor = new XmlDocument();
                xmlAuthor.LoadXml(Author);
                var jsonAuthor = Regex.Replace(JsonConvert.SerializeXmlNode(xmlAuthor), "(?<=\")(@)(?!.*\":\\s )", "",
                                               RegexOptions.IgnoreCase);
                var jObjectAuthor = JObject.Parse(jsonAuthor)["Author"];
                var author        = JsonConvert.DeserializeObject <User>(jObjectAuthor.ToString());
                draft.Author = author;
            }
            else
            {
                draft.Author = User.Unknown;
            }

            if (!string.IsNullOrWhiteSpace(Editor))
            {
                var xmlEditor = new XmlDocument();
                xmlEditor.LoadXml(Editor);
                var jsonEditor = Regex.Replace(JsonConvert.SerializeXmlNode(xmlEditor), "(?<=\")(@)(?!.*\":\\s )", "",
                                               RegexOptions.IgnoreCase);
                var jObjectEditor = JObject.Parse(jsonEditor)["Editor"];
                var editor        = JsonConvert.DeserializeObject <User>(jObjectEditor.ToString());
                draft.Editor = editor;
            }
            else
            {
                draft.Editor = User.Unknown;
            }

            if (!string.IsNullOrWhiteSpace(Tags))
            {
                var xmlTags = new XmlDocument();
                xmlTags.LoadXml(Tags);
                var jsonTags = Regex.Replace(JsonConvert.SerializeXmlNode(xmlTags), "(?<=\")(@)(?!.*\":\\s )", "",
                                             RegexOptions.IgnoreCase);
                var jObjectTags = JObject.Parse(jsonTags)["Tags"]["Tag"];
                if (jObjectTags.Type == JTokenType.Array)
                {
                    var tags = JsonConvert.DeserializeObject <IEnumerable <ItemTag> >(jObjectTags.ToString());
                    foreach (var tag in tags)
                    {
                        draft.ItemTags.Add(tag);
                    }
                }
                else
                {
                    var tag = JsonConvert.DeserializeObject <ItemTag>(jObjectTags.ToString());
                    draft.ItemTags.Add(tag);
                }
            }

            if (!string.IsNullOrWhiteSpace(Collaborators))
            {
                var xmlCollaborators = new XmlDocument();
                xmlCollaborators.LoadXml(Collaborators);
                var jsonCollaborators = Regex.Replace(JsonConvert.SerializeXmlNode(xmlCollaborators),
                                                      "(?<=\")(@)(?!.*\":\\s )", "", RegexOptions.IgnoreCase);
                var jObjectCollaborators = JObject.Parse(jsonCollaborators)["Collaborators"]["Collaborator"];
                if (jObjectCollaborators.Type == JTokenType.Array)
                {
                    var collaborators = JsonConvert.DeserializeObject <IEnumerable <Collaborator> >(jObjectCollaborators.ToString());
                    foreach (var collaborator in collaborators)
                    {
                        draft.AddCollaborator(collaborator);
                    }
                }
                else
                {
                    var collaborator = JsonConvert.DeserializeObject <Collaborator>(jObjectCollaborators.ToString());
                    draft.AddCollaborator(collaborator);
                }
            }

            return(draft);
        }