/// <summary> /// Serializes the data to the given output /// </summary> /// <param name="data">the data to be serialized</param> /// <returns>the serialized data</returns> public virtual string Write(object data) { IObjectWalker <T> walker = this.GetWalker(); if (walker == null) { throw new ArgumentNullException("walker"); } ITextFormatter <T> formatter = this.GetFormatter(); if (formatter == null) { throw new ArgumentNullException("formatter"); } try { // objects => tokens => characters return(formatter.Format(walker.GetTokens(data))); } catch (SerializationException) { throw; } catch (Exception ex) { throw new SerializationException(ex.Message, ex); } }
public ObjectDataMember(FieldInfo fieldInfo, IObjectWalker walker) { _memberInfo = fieldInfo; Walker = walker; }
public ObjectDataMember(PropertyInfo propertyInfo, IObjectWalker walker) { _memberInfo = propertyInfo; Walker = walker; }
public FuncComposer(IFuncFactory factory) { _walker = factory.CreateWalker(); _visitor = factory.CreateVisitor(); }
public static void WalkObject(object obj, IObjectWalker objectWalker, int depth) { Action <IObjectWalker, object, string, int> parseObject = null; objectWalker.OnStart(obj.GetType().Name); parseObject = (walker, o, txt, dep) => { if (dep-- == 0) { return; } if (o == null) { walker.OnField(ParseResult.CreateForField("Unknown", txt, "null")); return; } var t = o.GetType(); if (t.IsValueType) { walker.OnField(ParseResult.CreateForField(t.Name, txt, o.ToString())); } else { if (t == typeof(string)) { walker.OnField(ParseResult.CreateForField(t.Name, txt, (string)o)); } else { walker.OnBeginContainer(ParseResult.CreateForContainer(t.Name, txt)); if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Dictionary <,>)) { var dict = (IDictionary)o; foreach (DictionaryEntry entry in dict) { parseObject(walker, new KeyValue { Key = entry.Key, Value = entry.Value }, "", dep); } } else if (t.IsArray || t.IsGenericType && _genericDefinitions.Contains(t.GetGenericTypeDefinition())) { foreach (var item in (IEnumerable)o) { parseObject(walker, item, "", dep); } } else { var properties = o.GetType().GetProperties().Where(p => p.CanRead); foreach (PropertyInfo property in properties) { object val = property.GetValue(o, null); string name = property.Name; parseObject(objectWalker, val, name, dep); } } walker.OnEndContainer(); } } }; parseObject(objectWalker, obj, null, depth); objectWalker.OnFinish(); }
public static void WalkObject(object obj, IObjectWalker objectWalker) { WalkObject(obj, objectWalker, Int32.MaxValue); }