2013-09-27 3 views
1

Я использую C#, ASP.NET, я использую отслеживание API 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

Смежные вопросы