构造C#的最佳方法用于序列化/反序列化的字符串

时间:2012-01-31 00:05:14

标签: .net caching serialization reflection redis

我想将字符串转换为C#类型。这里的用例是我将序列化数据与类型一起存储在缓存中,然后将其转发回来。 我有一个名为DataEntities.Show的自定义类(其中DataEntities是命名空间)。 如果我存储该类'type“DataEntities.ShowEntity”然后尝试反序列化它,一切都很好,花花公子。

当我在缓存中存储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;
    }

1 个答案:

答案 0 :(得分: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());