栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

对象转储类

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

对象转储类

在sgmoore的链接中发布了对象转储器:

//Copyright (C) Microsoft Corporation.  All rights reserved.using System;using System.IO;using System.Collections;using System.Collections.Generic;using System.Reflection;// See the ReadMe.html for additional informationpublic class ObjectDumper {    public static void Write(object element)    {        Write(element, 0);    }    public static void Write(object element, int depth)    {        Write(element, depth, Console.Out);    }    public static void Write(object element, int depth, TextWriter log)    {        ObjectDumper dumper = new ObjectDumper(depth);        dumper.writer = log;        dumper.WriteObject(null, element);    }    TextWriter writer;    int pos;    int level;    int depth;    private ObjectDumper(int depth)    {        this.depth = depth;    }    private void Write(string s)    {        if (s != null) { writer.Write(s); pos += s.Length;        }    }    private void WriteIndent()    {        for (int i = 0; i < level; i++) writer.Write("  ");    }    private void WriteLine()    {        writer.WriteLine();        pos = 0;    }    private void WriteTab()    {        Write("  ");        while (pos % 8 != 0) Write(" ");    }    private void WriteObject(string prefix, object element)    {        if (element == null || element is ValueType || element is string) { WriteIndent(); Write(prefix); Writevalue(element); WriteLine();        }        else { IEnumerable enumerableElement = element as IEnumerable; if (enumerableElement != null) {     foreach (object item in enumerableElement) {         if (item is IEnumerable && !(item is string)) {  WriteIndent();  Write(prefix);  Write("...");  WriteLine();  if (level < depth) {      level++;      WriteObject(prefix, item);      level--;  }         }         else {  WriteObject(prefix, item);         }     } } else {     MemberInfo[] members = element.GetType().GetMembers(BindingFlags.Public | BindingFlags.Instance);     WriteIndent();     Write(prefix);     bool propWritten = false;     foreach (MemberInfo m in members) {         FieldInfo f = m as FieldInfo;         PropertyInfo p = m as PropertyInfo;         if (f != null || p != null) {  if (propWritten) {      WriteTab();  }  else {      propWritten = true;  }  Write(m.Name);  Write("=");  Type t = f != null ? f.FieldType : p.PropertyType;  if (t.IsValueType || t == typeof(string)) {      Writevalue(f != null ? f.GetValue(element) : p.GetValue(element, null));  }  else {      if (typeof(IEnumerable).IsAssignableFrom(t)) {          Write("...");      }      else {          Write("{ }");      }  }         }     }     if (propWritten) WriteLine();     if (level < depth) {         foreach (MemberInfo m in members) {  FieldInfo f = m as FieldInfo;  PropertyInfo p = m as PropertyInfo;  if (f != null || p != null) {      Type t = f != null ? f.FieldType : p.PropertyType;      if (!(t.IsValueType || t == typeof(string))) {          object value = f != null ? f.GetValue(element) : p.GetValue(element, null);          if (value != null) {   level++;   WriteObject(m.Name + ": ", value);   level--;          }      }  }         }     } }        }    }    private void Writevalue(object o)    {        if (o == null) { Write("null");        }        else if (o is DateTime) { Write(((DateTime)o).ToShortDateString());        }        else if (o is ValueType || o is string) { Write(o.ToString());        }        else if (o is IEnumerable) { Write("...");        }        else { Write("{ }");        }    }}

2015年更新

YAML也很好地达到了这个目的,这就是使用YamlDotNet可以做到的

install-package YamlDotNet

    private static void DumpAsYaml(object o)    {        var stringBuilder = new StringBuilder();        var serializer = new Serializer();        serializer.Serialize(new IndentedTextWriter(new StringWriter(stringBuilder)), o);        Console.WriteLine(stringBuilder);    }


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/573246.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号