2014-11-22 15 views
-1

在我當前使用的序列化軟件中,因此需要使用[Serializable]屬性標記所有內容。檢查我的所有類是否具有可序列化屬性

有沒有一種簡單的方法來檢查這使用我的Visual Studio沒有一次一個地通過它們,或只是等待它崩潰?

爲了澄清,我不需要知道如何檢查一個類是否可以在代碼中進行序列化。我正在討論使用IDE。

+3

你可以寫爲 – 2014-11-22 17:57:21

+0

的單元測試你能不能嘗試和序列化所有這些,看看有沒有什麼工作?像@VsevolodGoloviznin所建議的單元測試 – 2014-11-22 18:03:02

+0

我有很多類,每次添加新批次時,我擔心我會忘記一個。我想知道是否可以使用反射來獲取命名空間中的所有類... – Haedrian 2014-11-22 18:04:45

回答

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 
相關問題