检查我的所有类是否都具有Seri​​alizable属性

时间:2014-11-22 17:53:58

标签: c#

在我目前的软件中,我使用了序列化,因此需要使用[Serializable]属性标记所有内容。

有没有一种简单的方法可以使用我的Visual Studio进行检查,而无需一次检查一次,或者只是等待它崩溃?

为了澄清,我不需要知道如何检查类是否可以在代码中序列化。我在谈论使用IDE。

1 个答案:

答案 0 :(得分:1)

如果您想使用反射来查找未标记为[Serializable]的类,您可以使用反射通过GetTypes获取类类型,然后只查找未标记为Serializable的类。 试试这个:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace ReflectOnSerializableAttr
{
    class Program
    {
        static void Main(string[] args)
        {
            //use Linq
            var q = from t in Assembly.GetExecutingAssembly().GetTypes()
                    where t.IsClass &&  ((t.Attributes & TypeAttributes.Serializable) != TypeAttributes.Serializable)
                    select t;
            q.ToList().ForEach(t => Console.WriteLine(t.Name));

            Console.ReadKey();
        }
    }
    [Serializable]
    public class TestSerializableOne
    {
        public string SomeFunc() { return "somefunc"; }
    }

    public class TestForgotSerializable
    {
        private int _testInt = 200;
    }
}

上述程序输出:

Program
TestForgotSerializable