2013-04-17 59 views
6

我有一個通過Web服務(WCF)來的類對象。該類具有String類型的屬性和一些自定義類類型。如何將類對象轉換爲字符串?

如何獲取類型自定義類的屬性的屬性名稱和屬性名稱。

我嘗試了使用GetProperies()的反射,但失敗了。如果屬性類型是字符串類型,GetFields()給了我一些成功,我也想獲得自定義類型屬性的屬性。

這是我的代碼。

public static string ToClassString(this object value) 
{ 
    if (value == null) 
     return null; 
    var builder = new StringBuilder(); 
    builder.Append(value.GetType().Name + "{ "); 
    foreach (var prop in value.GetType().GetFields(
BindingFlags.Public 
| BindingFlags.Static | BindingFlags.Instance | BindingFlags.FlattenHierarchy | BindingFlags.GetProperty)) 
    { 
     builder.Append("{ "); 
     builder.Append(prop.Name + " , "); 
     switch (prop.FieldType.Namespace) 
     { 
      case "System": 
       builder.Append(prop.GetValue(value) + " }"); 
       break; 
      default: 
       builder.Append(prop.GetValue(value).ToClassString() + " }"); 
       break; 
     } 
    } 
    builder.Append("}"); 
    return builder.ToString(); 
} 

我得到的輸出

NotifyClass {{唯一ID,16175} {將nodeinfo,的nodeinfo {}} {事件類型, SAPDELETE}}

這裏是我想將其實例轉換爲字符串的類

[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] 
[System.ServiceModel.MessageContractAttribute(WrapperName="NotifyReq", WrapperNamespace="wrapper:namespace", IsWrapped=true)] 
public partial class Notify 
{ 

    [System.ServiceModel.MessageBodyMemberAttribute(Namespace="custom:namespace", Order=0)] 
    public int UniqueId; 

    [System.ServiceModel.MessageBodyMemberAttribute(Namespace="custom:namespace", Order=1)] 
    public eDMRMService.NodeInfo NodeInfo; 

    [System.ServiceModel.MessageBodyMemberAttribute(Namespace="custom:namespace", Order=2)] 
    public string EventType; 

    public Notify() 
    { 
    } 

    public Notify(int UniqueId, eDMRMService.NodeInfo NodeInfo, string EventType) 
    { 
     this.UniqueId = UniqueId; 
     this.NodeInfo = NodeInfo; 
     this.EventType = EventType; 
    } 
}   
+1

如何從不同的輸出,你想到什麼?問題是它不包含'NodeInfo'的成員?如果是這樣的話:'NotInfo'看起來像什麼?會員是「公共」嗎?這是一種公共類型嗎? etc –

回答

33

不需要重新發明輪子。使用Json.Net

string s = JsonConvert.SerializeObject(yourObject); 

就這樣。

您還可以使用JavaScriptSerializer

string s = new JavaScriptSerializer().Serialize(yourObject); 
+0

我不想使用外部程序集 –

+2

JavaScriptSerializer不是外部程序集。 –

+2

@TheIndianProgrammmer'JavaScriptSerializer'內建('System.Web.Script.Serialization')http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer(v=vs .100)的.aspx – I4V