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); }
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); }
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(); } }
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(); } }
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)); }
public override void Write(XXmlSerializerInternal serializer, XmlWriter writer, object obj) { writer.WriteValue((DateTimeOffset)obj); }
public override object Read(XXmlSerializerInternal serializer, XmlReader reader, Type type) { Debug.Assert(false); return(null); }
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);
public override object Read(XXmlSerializerInternal serializer, XmlReader reader, Type type) { return(reader.ReadContentAsDateTime()); }
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);
public override void Write(XXmlSerializerInternal serializer, XmlWriter writer, object obj) { Debug.Assert(typeof(object) == obj.GetType()); return; }