2008-12-13 8 views
2

Мне было интересно, знает ли кто-нибудь быстрый способ или кто-нибудь написал инструмент отражения, чтобы определить, какие объекты в решении не помечены как сериализуемые. Я переключаю сайт на StateServer, и мне нужно, чтобы все объекты помечены как сериализуемые. Я не хочу пропустить никого.Найти элементы, которые не являются [Serializable]

Кроме того, вторая часть должна быть сериализуема?

Сайт является 1,1-сайт ASP.NET построен с VS 2003

ответ

2

Перечисления по существу серийно.

Я написал этот помощник для получения атрибутов от объектов, вы можете добавить строку в верхней части приложения, которая вызывает следующий код:

var assemblies = GetTheAssembliesFromYourApp(); 
foreach (var assembly in assemblies) 
{ 
    var types = assembly.GetTypes(); 
    foreach (var type in types) 
    { 
     if (AttributeHelper.GetAttrbiute<Serializable> (type) == null) 
     { 
      // Log somewhere - this type isn't serialisable... 
     } 
    } 
} 


static class AttributeHelper 
{ 
    #region Static public methods 

    #region GetAttribute 

    static public T GetAttribute<T> (object obj) 
     where T : Attribute 
    { 
     if (obj == null) 
      throw new ArgumentNullException ("obj"); 

        // If the object is a member info then we can use it, otherwise it's an instance of 'something' so get it's type... 
     var member = (obj is System.Reflection.MemberInfo) ? (System.Reflection.MemberInfo)obj : obj.GetType(); 

     return GetAttributeImpl<T> (member); 
    } 

    #endregion GetAttribute 

    #endregion Static public methods 

    #region Static methods 

    #region GetAttributeImpl 

    static T GetAttributeImpl<T> (System.Reflection.MemberInfo member) 
     where T : Attribute 
    { 
     var attribs = member.GetCustomAttributes (typeof (T), false); 
     if (attribs == null || attribs.Length == 0) 
      return null; 

     return attribs[0] as T; 
    } 

    #endregion GetAttributeImpl 

    #endregion Static methods 
} 
2

Enum требуют, чтобы сериализовать.

Чтобы узнать, что не является сериализуемым, у меня есть модульный тест для этого объекта, который просто вызывает метод, чтобы узнать, является ли он сериализуемым. Этот метод пытаются сериализации, если не получится, объект не ...

public static Stream serialize<T>(T objectToSerialize) 
    { 
     MemoryStream mem = new MemoryStream(); 
     BinaryFormatter b = new BinaryFormatter(); 
     b.Serialize(mem, objectToSerialize); 
     return mem; 
    } 

В вас UnitTest вам нужно вызвать сериализации (objectToCheck); если не serizlisable, исключение будет повышаться.

+0

Две вещи, один есть способ сделать это, где это ищет все решение? два, мое решение - это сайт ASP.NET 1.1, используя vs 2003, я никогда не строил тесты в этой старой среде, не так ли? – bendewey 2008-12-13 15:11:39

+0

Все решение не должно быть сериализовано. Вы должны быть в состоянии выбрать, какой класс должен или нет. ANd VS2003 позволяет тестировать ... модульное тестирование не в VS (например, Nunit) – 2008-12-13 15:21:21

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