public DataWriter(DynamicSerializer parent, Type type) { this.Parent = parent; if (type.IsEnum) { WriteAction = WriteEnum; return; } if (typeof(IEnumerable).IsAssignableFrom(type)) { WriteAction = WriteEnumerable; if (type.GenericTypeArguments.Any()) { ListType = type.GenericTypeArguments.First(); } else { ListType = type.GetElementType(); } return; } Properties = Parent.GetSerializableProperties(type); WriteAction = WritePropertyValues; }
public DataReader(DynamicSerializer parent, Type type, Func <object> activator = null) { this.Parent = parent; ModelType = type; if (type.IsEnum) { ReadFunction = ReadEnum; return; } if (typeof(IEnumerable).IsAssignableFrom(type)) { if (type.GenericTypeArguments.Any()) { ReadFunction = ReadList; ListType = type.GenericTypeArguments.First(); } else { ReadFunction = ReadArray; ListType = type.GetElementType(); } return; } Properties = Parent.GetSerializableProperties(type); ReadFunction = ReadPropertyValues; ActivationFunction = activator; }
public DynamicSerializer Clone() { DynamicSerializer d = new DynamicSerializer(); foreach (var w in Writers) { if (d.Writers.ContainsKey(w.Key) == false) { d.Writers.Add(w.Key, w.Value); } } foreach (var r in Readers) { if (d.Readers.ContainsKey(r.Key) == false) { d.Readers.Add(r.Key, r.Value); } } return(d); }