static object ReadGeneric <TKey, TValue>(XXmlSerializerInternal serializer, XmlReader reader)
        {
            Dictionary <TKey, TValue> obj = new Dictionary <TKey, TValue>();
            bool is_null;

            while (serializer.ReadTypeStart(reader, out is_null))
            {
                Debug.Assert(is_null == false);
                // Key
                TKey key;
                serializer.ReadTypeStart(reader, out is_null);
                Debug.Assert(is_null == false);// Key 不能为null
                key = (TKey)serializer.InternalRead(reader, typeof(TKey));
                serializer.ReadTypeEnd(reader);
                // Value
                TValue value = default(TValue);
                serializer.ReadTypeStart(reader, out is_null);
                if (is_null == false)
                {
                    value = (TValue)serializer.InternalRead(reader, typeof(TValue));
                }
                obj.Add(key, value);
                serializer.ReadTypeEnd(reader);
            }
            return(obj);
        }
Esempio n. 2
0
        public override object Read(XXmlSerializerInternal serializer, XmlReader reader, Type type)
        {
            var    obj = Activator.CreateInstance(type, true);
            bool   is_null;
            string field_name;

            while (ReadFieldStart(reader, out field_name, out is_null))
            {
                var field = type.GetField(field_name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
                if (field == null)
                {
                    // throw ...
                }
                else
                {
                    if (is_null)
                    {
                        field.SetValue(obj, null);
                    }
                    else
                    {
                        field.SetValue(obj, serializer.InternalRead(reader, field.FieldType));
                    }
                }
                serializer.ReadTypeEnd(reader);
            }
            return(obj);
        }
Esempio n. 3
0
        public override object Read(XXmlSerializerInternal serializer, XmlReader reader, Type type)
        {
            string s   = reader.ReadContentAsString();
            var    obj = Enum.Parse(type, s);

            return(obj);
        }
        public override void Write(XXmlSerializerInternal serializer, XmlWriter writer, object obj)
        {
            var method_write = this.GetType()
                               .GetMethod("WriteGeneric", BindingFlags.Static | BindingFlags.NonPublic)
                               .MakeGenericMethod(obj.GetType().GetGenericArguments());

            method_write.Invoke(null, new object[] { serializer, writer, obj });
        }
        public override object Read(XXmlSerializerInternal serializer, XmlReader reader, Type type)
        {
            var method_write = this.GetType()
                               .GetMethod("ReadGeneric", BindingFlags.Static | BindingFlags.NonPublic)
                               .MakeGenericMethod(type.GetElementType());

            return(method_write.Invoke(null, new object[] { serializer, reader }));
        }
 static void WriteGeneric <T>(XXmlSerializerInternal serializer, XmlWriter writer, List <T> obj)
 {
     for (int i = 0; i < obj.Count; ++i)
     {
         writer.WriteStartElement("Item");
         serializer.InternalWrite(writer, obj[i], typeof(T));
         writer.WriteEndElement();
     }
 }
Esempio n. 7
0
 public override void Write(XXmlSerializerInternal serializer, XmlWriter writer, object obj)
 {
     foreach (var field in GetFieldInfos(obj.GetType()))
     {
         writer.WriteStartElement(field.Name);
         serializer.InternalWrite(writer, field.GetValue(obj), field.FieldType);
         writer.WriteEndElement();
     }
 }
        public override object Read(XXmlSerializerInternal serializer, XmlReader reader, Type type)
        {
            string s = reader.ReadString();

            if (string.IsNullOrEmpty(s))
            {
                return(' ');
            }
            else
            {
                return(s[0]);
            }
        }
 static void WriteGeneric <TKey, TValue>(XXmlSerializerInternal serializer, XmlWriter writer, Dictionary <TKey, TValue> obj)
 {
     foreach (var item in obj)
     {
         writer.WriteStartElement("Item");
         writer.WriteStartElement("Key");
         serializer.InternalWrite(writer, item.Key, typeof(TKey));
         writer.WriteEndElement();
         writer.WriteStartElement("Value");
         serializer.InternalWrite(writer, item.Value, typeof(TValue));
         writer.WriteEndElement();
         writer.WriteEndElement();
     }
 }
        static object ReadGeneric <T>(XXmlSerializerInternal serializer, XmlReader reader)
        {
            List <T> obj = new List <T>();
            bool     is_null;

            while (serializer.ReadTypeStart(reader, out is_null))
            {
                T item = default(T);
                if (is_null == false)
                {
                    item = (T)serializer.InternalRead(reader, typeof(T));
                }
                obj.Add(item);
                serializer.ReadTypeEnd(reader);
            }
            return(obj.ToArray());
        }
        public override void Write(XXmlSerializerInternal serializer, XmlWriter writer, object obj)
        {
            Array arr = (Array)obj;

            if (arr.GetLowerBound(0) != 0)
            {
                throw new XSerializeException("Array low bound must be 0");
            }
            var type         = obj.GetType();
            var element_type = type.GetElementType();

            foreach (var info in arr)
            {
                writer.WriteStartElement("Item");
                serializer.InternalWrite(writer, info, element_type);
                writer.WriteEndElement();
            }
        }
Esempio n. 12
0
        void _Write(XXmlSerializerInternal serializer, XmlWriter writer, object obj, Type type)
        {
            var fields = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)
                         .OrderBy(f => f.Name, StringComparer.Ordinal);

            foreach (var field in fields)
            {
                writer.WriteStartElement(field.Name);
                serializer.InternalWrite(writer, field.GetValue(obj), field.FieldType);
                writer.WriteEndElement();
            }

            if (type.BaseType != null)
            {
                writer.WriteStartElement("__Base__");
                writer.WriteAttributeString("type", type.BaseType.ToString());
                _Write(serializer, writer, obj, type.BaseType);
                writer.WriteEndElement();
            }
        }
 public override void Write(XXmlSerializerInternal serializer, XmlWriter writer, object obj)
 {
     writer.WriteValue((string)obj);
 }
        public override object Read(XXmlSerializerInternal serializer, XmlReader reader, Type type)
        {
            var obj = reader.ReadString();

            return(obj);
        }
 public override object Read(XXmlSerializerInternal serializer, XmlReader reader, Type type)
 {
     return((short)reader.ReadContentAsInt());
 }
 public override void Write(XXmlSerializerInternal serializer, XmlWriter writer, object obj)
 {
     byte[] data = (byte[])obj;
     writer.WriteString(Convert.ToBase64String(data));
 }
Esempio n. 17
0
 public override void Write(XXmlSerializerInternal serializer, XmlWriter writer, object obj)
 {
     writer.WriteValue((DateTimeOffset)obj);
 }
Esempio n. 18
0
 public override object Read(XXmlSerializerInternal serializer, XmlReader reader, Type type)
 {
     Debug.Assert(false);
     return(null);
 }
Esempio n. 19
0
 public override void Write(XXmlSerializerInternal serializer, XmlWriter writer, object obj)
 {
     _Write(serializer, writer, obj, obj.GetType());
 }
 public abstract void Write(XXmlSerializerInternal serializer, XmlWriter writer, object obj);
Esempio n. 21
0
 public override object Read(XXmlSerializerInternal serializer, XmlReader reader, Type type)
 {
     return(reader.ReadContentAsDateTime());
 }
Esempio n. 22
0
 public override void Write(XXmlSerializerInternal serializer, XmlWriter writer, object obj)
 {
     //writer.WriteAttributeString("type", obj.GetType().ToString());
     writer.WriteValue(obj.ToString());
 }
 public override object Read(XXmlSerializerInternal serializer, XmlReader reader, Type type)
 {
     return((ulong)reader.ReadContentAsDecimal());
 }
        public override object Read(XXmlSerializerInternal serializer, XmlReader reader, Type type)
        {
            string s = reader.ReadContentAsString();

            return(Convert.FromBase64String(s));
        }
 public abstract object Read(XXmlSerializerInternal serializer, XmlReader reader, Type type);
Esempio n. 26
0
 public override void Write(XXmlSerializerInternal serializer, XmlWriter writer, object obj)
 {
     Debug.Assert(typeof(object) == obj.GetType());
     return;
 }