2013-04-17 36 views
6

Tôi có một đối tượng lớp mà đi qua một dịch vụ web (WCF). Lớp này có các thuộc tính của kiểu String và một số loại Class tùy chỉnh.Làm cách nào để chuyển đổi một đối tượng lớp thành chuỗi?

Làm cách nào tôi có thể lấy Tên thuộc tính và Tên thuộc tính của thuộc tính loại lớp tùy chỉnh.

Tôi đã thử phản chiếu bằng GetProperies() nhưng không thành công. GetFields() đã cho tôi một số thành công nếu loại tài sản là loại chuỗi, tôi cũng muốn có được các thuộc tính của thuộc tính loại tùy chỉnh.

Đây là mã của tôi.

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(); 
} 

tôi có đầu ra như

NotifyClass {{UNIQUEID, 16.175} {NodeInfo, NodeInfo {}} {eventType, SAPDELETE}}

Đây là lớp có ví dụ tôi muốn chuyển đổi thành chuỗi

[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

Làm thế nào là đầu ra khác với những gì bạn mong đợi? là vấn đề mà nó không bao gồm các thành viên của 'NodeInfo'? nếu vậy: NotInfo' trông như thế nào? là các thành viên 'public'? nó là một loại công cộng? vv –

Trả lời

33

Không cần phải tái tạo lại bánh xe. Sử dụng Json.Net

string s = JsonConvert.SerializeObject(yourObject); 

Đó là tất cả.

Bạn cũng có thể sử dụng JavaScriptSerializer

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

Tôi không muốn sử dụng các assembly bên ngoài –

+2

JavaScriptSerializer không phải là một assembly bên ngoài. –

+2

@TheIndianProgrammmer 'JavaScriptSerializer' được tích hợp sẵn (' System.Web.Script.Serialization') http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer(v=vs .100) .aspx – I4V

Các vấn đề liên quan