具有Silverlight序列化属性的ReflectionTypeLoadException

时间:2010-06-08 07:57:10

标签: c# silverlight reflection serialization

我正在尝试从.NET 3.5应用程序检查silverlight 4程序集中的类型。我已经使用Assembly.ReflectionOnlyLoadFrom句子加载了silverlight程序集。

contractsAssembly = Assembly.ReflectionOnlyLoadFrom(contractsAssemblyPath);

当.NET应用程序尝试执行对GetTypes()的调用时,它会抛出ReflectionTypeLoadException。

Type[] types = contractsAssembly.GetTypes();

ReflectionTypeLoadException中的LoaderExceptions属性包含一个异常列表,所有这些异常都与加载具有序列化属性的类型的问题有关。

在程序集“YYYY”中输入“XXXX”的方法为“OnSerializing”,其序列化属性的签名不正确。

XXXX类型中包含以下定义:

    [System.Runtime.Serialization.OnSerializing]
    public void OnSerializing(System.Runtime.Serialization.StreamingContext context)


    [System.Runtime.Serialization.OnSerialized]
    public void OnSerialized(System.Runtime.Serialization.StreamingContext context)


    [System.Runtime.Serialization.OnDeserializing]
    public void OnDeserializing(System.Runtime.Serialization.StreamingContext context)


    [System.Runtime.Serialization.OnDeserialized]
    public void OnDeserialized(System.Runtime.Serialization.StreamingContext context)

我尝试将方法签名更改为内部或私有,但没有运气。当我在检查此程序集的silverlight应用程序中执行GetTypes()调用时,我没有任何问题,所以我认为这是由于.NET Framework和Silverlight之间不兼容。但是,我发现像Reflector这样的.NET工具可以检查这个Silverlight程序集,因此有一种方法可以使用.NET应用程序中的序列化属性检查Silverlight程序集。有人能否对我有所了解?

非常感谢提前。

何塞安东尼奥

1 个答案:

答案 0 :(得分:2)

实际上我不认为这是关于Silverlight和.NET Framework之间的不兼容性,而是关于3.5和4.0 .NET Framework(2.0和4.0 CLR)之间的不兼容性。

Since you cannot reference 4.0 assemblies in 3.5 project,我认为你可能无法以动态的方式成功加载它们。


任何有类似错误的人,但在混合装配时不会。

  

在程序集“YYYY”中输入“XXXX”的方法为“OnSerializing”,其序列化属性的签名不正确。

确保将StreamingContext context指定为参数。我有以下方法,它失败了以上错误:

    [OnDeserialized]
    private void OnDeserialized()
    {
        Init();
    }

即使这个问题很老,但我希望它会对某人有所帮助。