gpt4 book ai didi

.net - 从字符串构造 C# Type 以进行序列化/反序列化的最佳方法

转载 作者:可可西里 更新时间:2023-11-01 11:03:08 26 4
gpt4 key购买 nike

我想将字符串转换为 C# 类型。这里的用例是我将序列化数据与类型一起存储在缓存中,然后将其投回。我有一个名为 DataEntities.Show 的自定义类(其中 DataEntities 是一个命名空间)。如果我存储该类的类型“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;
}

最佳答案

您自行处理选角的任何特殊原因。您可以使用隐式声明通过简单的 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());

关于.net - 从字符串构造 C# Type 以进行序列化/反序列化的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9072634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com