我已将我的Web服务转换为具有一些数据交换的wcf服务.作为最佳实践,提到并且可取的是DataContracts应该继承自IExtensibleDataObject.我明白,在添加或删除数据库的情况下,IExtensibleDataObject很有帮助.但我无法得到客户端如何访问删除的数据库.这是我的代码:
[ServiceContract(Namespace = "http://mycompany.com/2010/08/")]
public class MyWebService {
[OperationContract]
public Employee Add(Employee emp)
{
// Some Processing
}
}
[DataContract(Name = "Employee", Namespace = "http://mycompany.com/2010/08/")]
public class Employee : IExtensibleDataObject {
[DataMember] public string FirstName;
[DataMember] public string LastName;
public ExtensionDataObject ExtensionData { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,在我的下一个Web服务版本中,我对DataContract进行了一些更改
[DataContract(Name = "Employee", Namespace = "http://mycompany.com/2010/09/")]
public class Employee : IExtensibleDataObject {
[DataMember] public string FirstName;
[DataMember] public string LastName;
[DataMember(IsRequired = true)] public string MiddleName;
public ExtensionDataObject ExtensionData { get; set; …Run Code Online (Sandbox Code Playgroud) 使用DataContracts,您可以从IExtensibleDataObject派生,以允许往返工作,而不会丢失XML文件中的任何未知的其他数据.
我不能使用DataContract,因为我需要控制输出XML的格式.但我还需要能够在旧版本的应用程序中读取未来版本的XML文件,而不会丢失XML文件中的任何数据.
例如
XML v1:
<Person>
<Name>Fred</Name>
</Person>
Run Code Online (Sandbox Code Playgroud)
XML v2:
<Person>
<Name>Fred</Name>
<Age>42</Age>
</Person>
Run Code Online (Sandbox Code Playgroud)
如果从我的应用程序的v1读取XML v2文件,则反序列化并将其再次序列化将其转换为XML v1文件.即"年龄"字段被删除.
是否有类似于IExtensibleDataObject的东西,我可以使用XmlSerializer来避免Age字段消失?