protected virtual bool Parse([CanBeNullObject] ClrObject clrObject, out string text)
        {
            text = string.Empty;
            if (clrObject.IsNullObj || (clrObject.Type == null))
            {
                return(false);
            }

            var elementType = clrObject.Type.ElementType;
            var type        = clrObject.Type;

            switch (elementType)
            {
            case ClrElementType.String:
            {
                text = type.GetValue(clrObject.Address) as string;
                break;
            }

            case ClrElementType.Int32:
            {
                text = ((int)type.GetValue(clrObject.Address)).ToString();

                break;
            }

            case ClrElementType.Int64:
            {
                text = ((long)type.GetValue(clrObject.Address)).ToString();
                break;
            }

            case ClrElementType.Boolean:
            {
                text = ((bool)type.GetValue(clrObject.Address)).ToString();
                break;
            }

            case ClrElementType.Double:
            {
                text = ((double)type.GetValue(clrObject.Address)).ToString();
                break;
            }

            case ClrElementType.UInt64:
            {
                text = ((ulong)type.GetValue(clrObject.Address)).ToString();
                break;
            }

            case ClrElementType.Struct:
            {
                if (string.Equals(type.Name, typeof(Guid).FullName))
                {
                    text = ClrObjectValuesReader.ReadGuidValue(clrObject).ToString();
                    break;
                }

                if (string.Equals(type.Name, typeof(DateTime).FullName))
                {
                    text = DateTimeReader.FromObjToDate(clrObject).ToString();
                    break;
                }

                if (string.Equals(type.Name, typeof(TimeSpan).FullName))
                {
                    text = TimeSpanReader.Read(clrObject).ToString();
                    break;
                }

                break;
            }
            }

            return(string.IsNullOrEmpty(text));
        }
示例#2
0
        protected virtual void AppendFieldToStringBuilder(StringBuilder sb, ClrField field)
        {
            Assert.ArgumentNotNull(sb, "stringbuilder");
            Assert.ArgumentNotNull(field, "field");
            switch (field.ElementType)
            {
            case ClrElementType.String:
            {
                sb.AppendFormat(fieldPrintFormat, field.Name, this.Obj.GetStringSafe(field.Name), Environment.NewLine);
                break;
            }

            case ClrElementType.Object:
            {
                sb.AppendFormat("{0}: {1}: {2}{3}", field.Name, field.Type.Name, this.Obj.GetRefFld(field.Name).HexAddress, Environment.NewLine);
                break;
            }

            case ClrElementType.Int32:
            {
                sb.AppendFormat(fieldPrintFormat, field.Name, this.Obj.GetSimpleFld <int>(field.Name), Environment.NewLine);
                break;
            }

            case ClrElementType.Int64:
            {
                sb.AppendFormat(fieldPrintFormat, field.Name, this.Obj.GetSimpleFld <long>(field.Name), Environment.NewLine);
                break;
            }

            case ClrElementType.Boolean:
            {
                sb.AppendFormat(fieldPrintFormat, field.Name, this.Obj.GetBoolFld(field.Name), Environment.NewLine);
                break;
            }

            case ClrElementType.Double:
            {
                sb.AppendFormat(fieldPrintFormat, field.Name, this.Obj.GetDoubleFld(field.Name), Environment.NewLine);
                break;
            }

            case ClrElementType.UInt64:
            {
                sb.AppendFormat(fieldPrintFormat, field.Name, this.Obj.GetUInt64Fld(field.Name), Environment.NewLine);
                break;
            }

            case ClrElementType.Struct:
            {
                var t = field.Type;
                if (t == null)
                {
                    break;
                }

                // check date
                string stringres = string.Empty;

                var fld = field.Type.GetFieldByName("dateData");
                if (fld != null)
                {
                    stringres = this.DateToString(field);
                }
                else if (TimeSpanReader.CanRead(this.Obj, field.Name))
                {
                    stringres = TimeSpanReader.Read(this.Obj, field.Name).ToString("g");
                }
                else
                {
                    break; // Cannot Read anyway =\
                }

                sb.AppendFormat(fieldPrintFormat, field.Name, stringres, Environment.NewLine);
                break;
            }
            }

            sb.AppendLine(string.Empty); // delimitor to simplify reading for human eye
        }