我在 XmlSer.dll
中有以下课程namespace xmlser
{
public class XmlSer
{
public Type test(string s)
{
return Type.GetType(s);
}
//...other code
}
}
以及 MyApp.exe 中的以下代码,它将 XmlSer.dll 作为参考链接
namespace MyApp
{
public class TestClass
{
public int f1 = 1;
public float f2 = 2.34f;
public double f3 = 3.14;
public string f4 = "ciao";
}
class MainClass
{
public static void Main(string[] args)
{
TestClass tc = new TestClass();
XmlSer ser = new XmlSer();
Console.WriteLine(ser.test("MyApp.TestClass")!=null);
}
}
运行MyApp.exe我得 false ,这意味着 ser XmlSer 的实例无法获得的类型Testclass (结果是 null )。 将 XmlSer 类直接放在 MyApp.exe 代码中我正确获取 TestClass 的类型。
检查网络我发现问题与程序集有关。这意味着, XmlSer.test 方法看不到.exe的程序集,因此它无法解析 TestClass 的类型。
如何解决 Myml.exe 中 XmlSer.dll 和 MyApp.MainClass 中维护 XmlSer 的问题>?
感谢。
的Alessandro
答案 0 :(得分:6)
由于两者不在同一个程序集中,您可能需要在类型字符串中包含程序集名称:
Console.WriteLine(ser.test("MyApp.TestClass, MyApp")!=null);
如果您只想序列化任意对象,则可以执行以下操作:
public static class Serialization
{
public static void Serialize(object o, Stream output)
{
var serializer = new XmlSerializer(o.GetType());
serializer.Serialize(output, o);
}
}
答案 1 :(得分:3)
不确定,但也许可以尝试ser.Test(“MyApp.TestClass,MyApp”)?
编辑:显然MyApp不是XmlSer
答案 2 :(得分:0)
我找到了一个明确的解决方案。 我只是从应用程序中获取所有程序集的向量。 然后在每个程序集上我调用Type.GetType直到我得到一个有效的Type。 通过这种方式,您可以获得在流程空间中加载的所有类型,无论程序集如何。
以下是该功能的代码。
public static Type GetGlobalType(string s)
{
Type t=null;
Assembly[] av = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly a in av)
{
t=Type.GetType(s + "," + a.GetName());
if (t != null)
break;
}
return t;
}
干杯:)
的Alessandro