コード例 #1
0
ファイル: DataWriter`1.cs プロジェクト: V1046-R/ShipGirlBot
        /// <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);
            }
        }
コード例 #2
0
 public ObjectDataMember(FieldInfo fieldInfo, IObjectWalker walker)
 {
     _memberInfo = fieldInfo;
     Walker      = walker;
 }
コード例 #3
0
 public ObjectDataMember(PropertyInfo propertyInfo, IObjectWalker walker)
 {
     _memberInfo = propertyInfo;
     Walker      = walker;
 }
コード例 #4
0
 public FuncComposer(IFuncFactory factory)
 {
     _walker  = factory.CreateWalker();
     _visitor = factory.CreateVisitor();
 }
コード例 #5
0
        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();
        }
コード例 #6
0
 public static void WalkObject(object obj, IObjectWalker objectWalker)
 {
     WalkObject(obj, objectWalker, Int32.MaxValue);
 }