Ejemplo n.º 1
0
        public virtual T Deserialize <T>(IRestResponse response)
        {
            if (string.IsNullOrEmpty(response.Content))
            {
                return(default(T));
            }

            var doc  = XDocument.Parse(response.Content);
            var root = doc.Root;

            if (RootElement.HasValue() && doc.Root != null)
            {
                root = doc.Root.Element(RootElement.AsNamespaced(Namespace));
            }

            // autodetect xml namespace
            if (!Namespace.HasValue())
            {
                RemoveNamespace(doc);
            }

            var x       = Activator.CreateInstance <T>();
            var objType = x.GetType();

            if (objType.IsSubclassOfRawGeneric(typeof(List <>)))
            {
                x = (T)HandleListDerivative(x, root, objType.Name, objType);
            }
            else
            {
                Map(x, root);
            }

            return(x);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Serialize the object as XML
        /// </summary>
        /// <param name="obj">Object to serialize</param>
        /// <returns>XML as string</returns>
        public string Serialize(object obj)
        {
            var doc = new XDocument();

            var t    = obj.GetType();
            var name = t.Name;

            var options = t.GetAttribute <SerializeAsAttribute>();

            if (options != null)
            {
                name = options.TransformName(options.Name ?? name);
            }

            var root = new XElement(name.AsNamespaced(Namespace));

            Map(root, obj);

            if (RootElement.HasValue())
            {
                var wrapper = new XElement(RootElement.AsNamespaced(Namespace), root);
                doc.Add(wrapper);
            }
            else
            {
                doc.Add(root);
            }

            return(doc.ToString());
        }
Ejemplo n.º 3
0
        public T Deserialize <T>(RestResponse response) where T : new()
        {
            if (response.Content == null)
            {
                return(default(T));
            }

            var doc  = XDocument.Parse(response.Content);
            var root = doc.Root;

            if (RootElement.HasValue() && doc.Root != null)
            {
                root = doc.Root.Element(RootElement.AsNamespaced(Namespace));
            }

            // autodetect xml namespace
            if (!Namespace.HasValue())
            {
                RemoveNamespace(doc);
            }

            var x       = new T();
            var objType = x.GetType();

            if (objType.IsSubclassOfRawGeneric(typeof(List <>)))
            {
                x = (T)HandleListDerivative(x, root, objType.Name, objType);
            }
            else
            {
                Map(x, root);
            }

            return(x);
        }
Ejemplo n.º 4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="strDoc"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public object Deserialize(string strDoc, Type type)
        {
            if (string.IsNullOrEmpty(strDoc))
            {
                throw new ArgumentNullException("strDoc");
            }
            if (type == null)
            {
                throw new ArgumentNullException("type");
            }
            if (type.IsAbstract || type.IsInterface)
            {
                throw new ArgumentException(
                          string.Format(Mini_Resources.TypeAbstract,
                                        type.FullName,
                                        type.FullName));
            }


            var doc  = XDocument.Parse(strDoc);
            var root = doc.Root;

            if (RootElement.HasValue() && doc.Root != null)
            {
                root = doc.Root.Element(RootElement.AsNamespaced(Namespace));
            }

            if (!Namespace.HasValue())
            {
                RemoveNamespace(doc);
            }

            return(Read(type, root));
        }
Ejemplo n.º 5
0
        public T Deserialize <T>(string content)
        {
            if (string.IsNullOrEmpty(content))
            {
                return(default(T));
            }

            var doc  = XDocument.Parse(content);
            var root = doc.Root;

            if (!string.IsNullOrEmpty(RootElement) && doc.Root != null)
            {
                root = doc.Root.DescendantsAndSelf(RootElement.AsNamespaced(Namespace)).SingleOrDefault();
            }

            if (!string.IsNullOrEmpty(Namespace))
            {
                doc.RemoveNamespace();
            }

            var result     = Activator.CreateInstance <T>();
            var resultType = result.GetType();

            if (resultType.IsSubclassOfRawGeneric(typeof(List <>)))
            {
                result = (T)HandleListDerivative(root, resultType);
            }

            return(result);
        }
        /// <summary>
        /// Serialize the object as XML
        /// </summary>
        /// <param name="obj">Object to serialize</param>
        /// <returns>XML as string</returns>
        public string Serialize(object obj)
        {
            var doc = new XDocument();

            var t    = obj.GetType();
            var name = t.Name;

            var options = t.GetAttribute <SerializeAsAttribute>();

            if (options != null)
            {
                name = options.TransformName(options.Name ?? name);
            }

            var root = new XElement(name.AsNamespaced(Namespace));

            if (obj is IList)
            {
                var itemTypeName = "";
                foreach (var item in (IList)obj)
                {
                    var type = item.GetType();

                    var ignore = type.GetAttribute <XmlIgnoreAttribute>();
                    if (ignore != null)
                    {
                        continue;
                    }

                    var opts = type.GetAttribute <SerializeAsAttribute>();
                    if (opts != null)
                    {
                        itemTypeName = opts.TransformName(opts.Name ?? name);
                    }
                    if (itemTypeName == "")
                    {
                        itemTypeName = type.Name;
                    }
                    var instance = new XElement(itemTypeName);
                    Map(instance, item);
                    root.Add(instance);
                }
            }
            else
            {
                Map(root, obj);
            }

            if (RootElement.HasValue())
            {
                var wrapper = new XElement(RootElement.AsNamespaced(Namespace), root);
                doc.Add(wrapper);
            }
            else
            {
                doc.Add(root);
            }

            return(doc.ToString());
        }
Ejemplo n.º 7
0
        public string Serialize(object obj)
        {
            XDocument            xDocument = new XDocument();
            Type                 type      = obj.GetType();
            string               text      = type.Name;
            SerializeAsAttribute attribute = type.GetAttribute <SerializeAsAttribute>();

            if (attribute != null)
            {
                text = attribute.TransformName(attribute.Name ?? text);
            }
            XElement xElement = new XElement(text.AsNamespaced(Namespace));

            if (obj is IList)
            {
                string text2 = "";
                foreach (object item in (IList)obj)
                {
                    Type type2 = item.GetType();
                    SerializeAsAttribute attribute2 = type2.GetAttribute <SerializeAsAttribute>();
                    if (attribute2 != null)
                    {
                        text2 = attribute2.TransformName(attribute2.Name ?? text);
                    }
                    if (text2 == "")
                    {
                        text2 = type2.Name;
                    }
                    XElement xElement2 = new XElement(text2.AsNamespaced(Namespace));
                    Map(xElement2, item);
                    xElement.Add(xElement2);
                }
            }
            else
            {
                Map(xElement, obj);
            }
            if (RootElement.HasValue())
            {
                XElement content = new XElement(RootElement.AsNamespaced(Namespace), xElement);
                xDocument.Add(content);
            }
            else
            {
                xDocument.Add(xElement);
            }
            return(xDocument.ToString());
        }
Ejemplo n.º 8
0
 public virtual T Deserialize <T>(IRestResponse response)
 {
     if (!string.IsNullOrEmpty(response.Content))
     {
         XDocument xDocument = XDocument.Parse(response.Content);
         XElement  root      = xDocument.Root;
         if (RootElement.HasValue() && xDocument.Root != null)
         {
             root = xDocument.Root.Element(RootElement.AsNamespaced(Namespace));
         }
         if (!Namespace.HasValue())
         {
             RemoveNamespace(xDocument);
         }
         T    val  = Activator.CreateInstance <T>();
         Type type = val.GetType();
         val = ((!type.IsSubclassOfRawGeneric(typeof(List <>))) ? ((T)Map(val, root)) : ((T)HandleListDerivative(val, root, type.Name, type)));
         return(val);
     }
     return(default(T));
 }
Ejemplo n.º 9
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="instance"></param>
        /// <returns></returns>
        public string Serialize(object instance)
        {
            if (instance == null)
            {
                throw new ArgumentNullException("instance");
            }
            var writer = new XmlWriter {
                Owner = this
            };

            var      type = instance.GetType();
            var      doc  = new XDocument();
            XElement root = null;

            if (Types.ByteArray == type)
            {
                root = writer.WriteByteArray(instance as byte[]);
            }
            else if (type.IsCollectionTypeExcludeStringAndDictionaryType())
            {
                root = writer.WriteList(instance as IEnumerable);
            }
            else //TODO:字典,泛型对象需要检查
            {
                var name = type.Name;
                root = new XElement(name.AsNamespaced(Namespace));
                writer.Write(root, instance);
            }

            if (RootElement.HasValue())
            {
                doc.Add(new XElement(RootElement.AsNamespaced(Namespace), root));
            }
            else
            {
                doc.Add(root);
            }

            return(doc.ToString());
        }
Ejemplo n.º 10
0
        public virtual T Deserialize <T>(IRestResponse response)
        {
            if (string.IsNullOrEmpty(response.Content))
            {
                return(default(T));
            }

            XDocument doc  = XDocument.Parse(response.Content);
            XElement  root = doc.Root;

            if (this.RootElement.HasValue() && doc.Root != null)
            {
                //root = doc.Root.DescendantsAndSelf(this.RootElement.AsNamespaced(this.Namespace)).SingleOrDefault();
                root = doc.Root.Element(RootElement.AsNamespaced(Namespace));
            }

            // autodetect xml namespace
            if (!this.Namespace.HasValue())
            {
                RemoveNamespace(doc);
            }

            T    x       = Activator.CreateInstance <T>();
            Type objType = x.GetType();

            if (objType.IsSubclassOfRawGeneric(typeof(List <>)))
            {
                x = (T)this.HandleListDerivative(root, objType.Name, objType);
            }
            else
            {
                x = (T)this.Map(x, root);
            }

            return(x);
        }