2013-03-20 69 views
1

我创建的表单的字段需要通过电子邮件发送。这是一个内部项目,所以时间表很紧,电子邮件不需要很漂亮。将类转换为通过电子邮件发送的字符串

是否有一个快速和肮脏的方式序列化/格式化类到一个类似的可读的字符串:

Field1Name: 
This is the value of field1 
Field2Name: 
value of field 2 

我可以写了一些反思这样做没有太多的问题,但我很好奇如果有一些已经嵌入到.NET中的东西可能会为我做。就像我说的,我在寻找快速的东西。

+1

反思*为*快速(实施),以及内置。 – Jamiec 2013-03-20 15:49:01

+2

您可以使用JSON序列化程序。对于非技术性的个人来说这看起来有点奇怪,但我想这会起作用。它具有自动处理嵌套对象和数组的优点。 – 2013-03-20 15:49:32

+0

@Jamiec:如果你有嵌套的对象,它不会那么简单。当你要遍历的时候,以及当你打算调用ToString的时候,你需要有一些逻辑。 – 2013-03-20 15:50:27

回答

3

您可以使用反射像这样:

public static string ClassToString(Object o) 
{ 
    Type type = o.GetType(); 
    StringBuilder sb = new StringBuilder(); 
    foreach (FieldInfo field in type.GetFields()) 
    { 
     sb.Append(field.Name).AppendLine(": "); 
     sb.AppendLine(field.GetValue(o).ToString()); 
    } 
    foreach (PropertyInfo property in type.GetProperties()) 
    { 
     sb.Append(property.Name).AppendLine(": "); 
     sb.AppendLine(property.GetValue(o, null).ToString()); 
    } 
    return sb.ToString(); 
} 
+1

这是否适用于OP提到的嵌套对象? :) – 2013-03-20 15:56:48

+0

正是我在找什么。很确定我可以很简单地适应嵌套对象。 – jwynveen 2013-03-20 15:57:39

+0

@jwynveen - 正是你在找什么?这正是你在你的问题中描述的*已经排除的内容。好吧,很高兴你的问题得到解答。 – Jamiec 2013-03-20 16:02:43

3

如果您不想在输出中使用尖括号或花括号,最好的方法是为您的课程编写ToString()方法,并在您想要发送字符串表示时调用它。应该带你五分钟左右。

public override string ToString() 
{ 
    return "Field1Name: \n" + field1.ToString() + 
      "\nField2Name: \n" + field2.ToString() + 
      "\nField3Name: \n" + field3.ToString() + 
      "\nNestedObject: \n" + nestedObject.ToString(); 
} 

确保您替代嵌套对象的ToString()。 :)

+0

建议+1请你举个例子。 – Zaki 2013-03-20 15:49:53

+0

也许他们想要一个适用于所有类的通用解决方案。 – 2013-03-20 15:53:12

+0

我真的不想写出所有的字段。我有大约30个字段,并试图避免这样手动写出它们。 – jwynveen 2013-03-20 15:53:51