2012-01-31 56 views
1

我想將字符串轉換爲C#類型。這裏的用例是我將序列化數據與類型一起存儲在緩存中,然後將其轉回。 我有一個名爲DataEntities.Show(其中DataEntities是一個命名空間)的自定義類。 如果我存儲那個類的類型爲「DataEntities.ShowEntity」,然後嘗試反序列化它,那麼所有的都很好,並且很棒。爲串行化/反序列化構造C#類型的最佳方式

當我在緩存中存儲List類型的對象時,會出現故障。 它的結果類型是「System.Collections.Generic.List`1 [DataEntities.ShowEntity]」,所以下面的查找失敗,因爲程序集只包含DataEntities.ShowEntity,並且找不到結果類型。結果我得到一個null。

我能想到一個醜陋的解決方案,我在解析字符串類型前綴爲「List」或「Enumeration」,但必須有一個更優雅的方式。有什麼建議?

private static Type GetGlobalType(string s) 
    { 
     Type t = null; 
     Assembly[] av = AppDomain.CurrentDomain.GetAssemblies(); 
     foreach (Assembly a in av) 
     { 
      Type[] types = a.GetTypes(); 
      t = Type.GetType(s + "," + a.GetName()); 
      if (t == null) 
      { 
        t = Type.GetType(s); 
      } 

      if (t != null) 
        break; 
     } 
     return t; 
    } 
+3

是否可以使用JSON或XML?這兩種方法都允許您使用內置的C#方法進行bost序列化和反序列化。 – Tjaart 2012-01-31 00:11:06

+0

你試過[ServiceStack.Text](https://github.com/ServiceStack/ServiceStack.Text)嗎? – 2012-01-31 06:46:38

回答

0

你自己處理鑄件的任何特殊原因。你可以使用隱式聲明來處理這個簡單的XML序列化。

當類被反序列化時,它會在運行時自動設置正確的類型,不需要進行轉換。

 var dataIn = new List<DataEntities.ShowEntity>();    
     Console.WriteLine("Type before serialization: " + dataIn.GetType()); 

     var xs = new XmlSerializer(dataIn.GetType());    
     var xmlWriter = XmlWriter.Create(@"C:\test.xml"); 
     xs.Serialize(xmlWriter, dataIn); 
     xmlWriter.Close(); 

     var xmlReader = XmlReader.Create(@"C:\test.xml"); 
     var dataOut = xs.Deserialize(xmlReader); 
     xmlReader.Close(); 

     Console.WriteLine("Type after deserialization: " + dataOut.GetType());  
相關問題