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)); }
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 }