2013-03-20 36 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

相關問題