我有一个自定义设置文件,我使用一个序列化/反序列化XmlSerializer.我的对象定义中没有定义架构且没有序列化标签,只是直接对象序列化(尽管如果需要我会添加它们).
我的问题是我需要向对象添加数据成员.如果我这样做,我知道旧的设置文件不会反序列化.
有没有办法为添加的成员指定默认值,或者如果XML中缺少这些默认值,可以采用一些简单的方法来忽略它们?
我有我的WCF服务的以下数据合同类:
[DataContract(Name = "MyClassDTO")]
public class MyClass
{
private string name = "Default Name";
[DataMember]
public string Name
{
get { return name; }
set { name = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用Visual Studio的添加服务引用函数生成WCF服务引用时,生成的DataContract看起来像这样:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name = "MyClassDTO", Namespace = "xxx")]
[System.SerializableAttribute()]
public partial class MyClassDTO : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
{
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string NameField;
[System.Runtime.Serialization.DataMemberAttribute()]
public string Name
{
get
{
return this.NameField;
}
set
{
if ((object.ReferenceEquals(this.NameField, value) != true))
{
this.NameField = value;
this.RaisePropertyChanged("Name");
} …Run Code Online (Sandbox Code Playgroud) 我们正在编写C#客户端,它应该连接到旧的旧服务器.为了在将来可扩展,我们希望利用WCF框架.
旧的遗留协议是专有协议和二进制协议.要集成到WCF,我们希望将通常的XML序列化器替换为我们专有的二进制格式marshaller.请注意,我们不希望将XML封装到其他传输协议中,而是将XML序列化器完全替换为无关.想想WCF与CORBA(但不是真正的CORBA)交谈,它不了解任何HTTP/SOAP/MTOM/...
有人能指出我们如何做到这一点的例子