2013-03-20 3 views
1

필드를 전자 메일로 보내야하는 양식을 만듭니다. 그것은 내부 프로젝트이므로 타임 라인이 빡빡하고 이메일이 꽤 필요하지 않습니다.클래스를 문자열로 변환하여 이메일을 보내십시오.

이와 유사한 읽을 수있는 문자열로 클래스를 포맷/직렬화 할 수있는 신속하고 더러운 방법이 있나요 :

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

나는 많은 문제없이 할 수있는 몇 가지 반사를 쓸 수 있지만, 내가 궁금 나에게 도움이 될 .NET에 이미 내장 된 것이 있다면. 내가 말했듯이, 나는 빠른 것을 찾고 있습니다.

+1

반영 * * 빠른 (구현하는), 그리고 내장입니다. – Jamiec

+2

JSON 시리얼 라이저를 사용할 수 있습니다. 그것은 비 기술적 인 개인을 위해 조금 이상하게 보일 것입니다 그러나 나는 그것이 작동 할 것이라는 점을 짐작한다. 중첩 된 객체와 배열을 자동으로 처리한다는 장점이 있습니다. –

+0

@Jamiec : 중첩 된 객체가 있으면 그렇게 간단하지 않습니다. 트래버스 할 때와 ToString을 호출 할 때 논리가 필요합니다. –

답변

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가 언급 한 중첩 된 객체에 대해이 작업이 가능합니까? :) –

+0

정확히 내가 무엇을 찾고 있었는지. 확실히 중첩 된 객체에 대해 간단하게 적응할 수 있습니다. – jwynveen

+0

@jwynveen - 정확히 당신이 찾고 있던 무엇입니까? 그것은 당신이 * 이미 배제한 것으로 당신의 질문에 묘사 한 것입니다. 아 글쎄, 당신의 질문에 답 해줘서 다행입니다. – Jamiec

3

꺾쇠 괄호 또는 중괄호를 출력하지 않으려면 클래스에 ToString() 메서드를 작성하고 문자열 표현을 보내려는 경우 호출하는 것이 가장 좋습니다. 약 5 분이 걸릴거야.

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

+0

어쩌면 그들은 모든 클래스에 적용 가능한 일반적인 솔루션을 원할지도 모릅니다. –

+0

나는 모든 필드를 정말로 쓰고 싶지 않습니다. 나는 약 30 개의 필드를 가지고 있으며 이것을 수동으로 작성하는 것을 피하려고합니다. – jwynveen

관련 문제