列表<object>在开发计算机上进行序列化工作但在其他计算机上失败</object>

时间:2013-02-20 15:54:09

标签: c# serialization deployment

我使用此函数在xml文件中序列化一个对象集合。

    public void SerializeEnvironment()
    {            
            if (xs == null) xs = new XmlSerializer(typeof(IList<Classes.Environment>));

            using (StreamWriter wr = new StreamWriter(ConfigFilePath))
                xs.Serialize(wr, Environments);            
    }

该程序在我的开发机器上完美运行。但是当我在其他计算机上进行部署时,程序在序列化方法上失败并出现此错误:

  

System.InvalidCastException:   [A] {System.Collections.Generic.List {1}} 1 [产品]。   类型A源自'mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'   在位于'C:\ Windows \ Microsoft.Net \ assembly \ GAC_32 \ mscorlib \ v4.0_4.0.0.0__b77a5c561934e089 \ mscorlib.dll'的上下文'LoadNeither'中。   类型B源自'mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'   在位于'C:\ Windows \ Microsoft.Net \ assembly \ GAC_32 \ mscorlib \ v4.0_4.0.0.0__b77a5c561934e089 \ mscorlib.dll'的上下文'LoadNeither'中。   在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterList1.Write3_ArrayOfEnvironment(Object o)

我测试很多东西要解决但没有成功。 提前感谢任何建议或决议:)

另外,这里是我的对象类:

1[Product] cannot be cast to
  [B]System.Collections.Generic.List

3 个答案:

答案 0 :(得分:2)

猜测,但你的开发机器是64位吗?如果是这样,请尝试为x86编译项目。您可以通过在解决方案资源管理器中右键单击项目并转到“属性”来执行此操作。单击Build选项卡,将Platform Target选项从“Any CPU”/“x64”更改为“x86”。构建您的解决方案并重新部署以重试。

答案 1 :(得分:1)

尝试在solution explorer中选择您引用的所有内容,并将Copy local窗口中的Properties属性设置为true,这样它们就会被复制到带有可执行文件或dll文件的目录中编译后。如果目标计算机上没有必要的库,它应该会有所帮助。

答案 2 :(得分:0)

我相信您的测试机器没有使用与您的版本相同的.net版本。如果您测试的机器没有.net 4.0安装它...如果测试机器运行的是Windows XP而您的版本是.net 4.5,则需要将程序降级到.net 4.0。