2013-09-27 171 views
1

我正在使用C#,ASP.NET,我使用UPS API跟蹤來獲取交付信息,在發出請求時,我找回了一個對象(trackResponse),它非常複雜並且有很多字段/屬性或其他嵌入其中的對象。如何深入搜索複雜對象中的每個字段?

如何編程以搜索該對象中的每個可能的值字段(string/int/double)?

基本上我想這樣的方法:

public static bool FindValueInObject(object Input, object SearchValue) 
    { 
     Type MyType = Input.GetType(); 
     var props = typeof(MyType).GetProperties(); 

     foreach (PropertyInfo propertyInfo in props) 
     { 
      //Console.WriteLine(string.Format("Name: {0} PropertyValue: {1}", propertyInfo.Name, propertyInfo.GetValue(mco, null))); 

      Type ObjectType = propertyInfo.GetType(); 
      Type SearchType = SearchValue.GetType(); 

      object ObjectValue = propertyInfo.GetValue(Input, null); 

      if (ObjectType == SearchType) 
      { 
       if(ObjectValue == SearchValue) 
       { 
        return true; 
       } 
      } 
      else 
      { 
       FindValueInObject(ObjectValue, SearchValue); 
      } 
     } 

     return false; 
    } 

但上面的代碼沒有工作。請看一下。

+0

使用反射。獲取對象中的所有類型,然後遍歷每個類型以檢查值。 – tsells

+0

有沒有可以做到這一點的一般方法? –

回答

1

這裏亞去....

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Reflection; 
using System.Text; 

namespace ConsoleApplication3 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var mco = new MyComplexObject(); 
      mco.MyDate1 = DateTime.Now; 
      mco.MyDate2 = DateTime.Now; 
      mco.MyDate3 = DateTime.Now; 
      mco.MyString1 = "String1"; 
      mco.MyString2 = "String1"; 
      mco.MyString3 = "String1"; 


      var props = typeof(MyComplexObject).GetProperties(); 
      foreach (PropertyInfo propertyInfo in props) 
      { 
       Console.WriteLine(string.Format("Name: {0} PropertyValue: {1}", propertyInfo.Name, propertyInfo.GetValue(mco, null))); 
      } 
      Console.ReadLine(); 
     } 
    } 


    public class MyComplexObject 
    { 
     public string MyString1 { get; set; } 
     public string MyString2 { get; set; } 
     public string MyString3 { get; set; } 
     public DateTime MyDate1 { get; set; } 
     public DateTime MyDate2 { get; set; } 
     public DateTime MyDate3 { get; set; } 
    } 

} 
+1

如果它有對象內部的對象,它會工作嗎? –

+0

我可以指定,以便我只能搜索字符串字段嗎? –

+0

你可以通過編碼做任何你想做的事 - 這只是時間和資源的問題。您需要向邏輯添加遞歸來掃描內部對象。 – tsells