C# DataContractSerializer,基类位于不同的命名空间中,没有属性

C# DataContractSerializer,基类位于不同的命名空间中,没有属性,c#,datacontractserializer,C#,Datacontractserializer,到目前为止,我一直在使用DataContractSerializer从XML文件中读取域数据。这只是开始-我将在适当的时候进入数据库。有很多域类,有很多属性,所以用特定于XML反序列化的属性来修饰它们是不可取的,这只是暂时的。到目前为止,我一直在工作,而不必这样做 我刚刚将一个基类从域模型名称空间/程序集移动到一个公共名称空间/程序集,因为它适用于其他解决方案。这导致反序列化中断。对象仍然被创建,但基类上没有设置任何内容。起初,我认为我可以通过在调用其ReadObject方法之前将最近移动的基类

到目前为止,我一直在使用
DataContractSerializer
从XML文件中读取域数据。这只是开始-我将在适当的时候进入数据库。有很多域类,有很多属性,所以用特定于XML反序列化的属性来修饰它们是不可取的,这只是暂时的。到目前为止,我一直在工作,而不必这样做

我刚刚将一个基类从域模型名称空间/程序集移动到一个公共名称空间/程序集,因为它适用于其他解决方案。这导致反序列化中断。对象仍然被创建,但基类上没有设置任何内容。起初,我认为我可以通过在调用其
ReadObject
方法之前将最近移动的基类型作为“已知类型”传递给
DataContractSerializer
的构造函数来解决这个问题。但这没用

恢复名称空间,但将其保留在另一个程序集中,可以消除问题。但显然,这不是一个可接受的解决方案。无论如何,这意味着问题在于不同的名称空间


那么,我该怎么做才能使反序列化再次工作(除了将基类移回或插入属性加载)?

如果使用新引入的名称空间对现有文件进行反序列化,它将无法正确映射,从而导致如您所述的空结构。我会用新的名称空间移动类,然后将所有xml文件的全局字符串替换到新的名称空间…@Neilvereynne-明白了。我的XML文件实际上是手工编制的,并且依赖于默认的名称空间。我只需定义一个新的
xmlns
前缀并将其附加到已移动类的元素中,就解决了这个问题。太棒了,很高兴您让它工作了。