Pregunta

Me preguntaba si alguien sabe de una manera rápida o si alguien ha escrito una herramienta de reflexión para decir que los objetos en una solución que no están marcados como serializable. Estoy cambiando un sitio a un StateServer y tengo que tener todos los objetos marcados como serializable. No quiero perder ninguna.

Además, segunda parte hacer enumeraciones tienen que ser serializable?

El sitio web es un sitio de ASP.NET 1.1 construido con VS 2003

¿Fue útil?

Solución

enumeraciones son inherentemente serialisable.

he escrito este ayudante para conseguir los atributos de los objetos, se puede añadir una línea en la parte superior de la aplicación que llama al siguiente código:

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
}

Otros consejos

Enum requiere ser serializable.

Para saber lo que no es serializable, yo no tengo prueba de unidad a estos objetos que simplemente llamar a un método para saber si es serializable. Este método intenta serializar, si falla, el objeto no es ...

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

En unittest que necesita llamar a serializar (objectToCheck); si no serizlisable, una excepción se elevará.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top