技术开发 频道

WCF中的Data Contract:对Generic的支持


    对于不习惯看XSD的朋友,我们可以通过Add Service Reference的方式创建本地的Proxy file,借助生成的与之对应的Class来看看这个XSD最终呈现的结构:
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="BillOfOrderHeaderOrderDetailLZ9Dq20o", Namespace="http://schemas.datacontract.org/2004/07/Artech.SpecialDataContract.Contract")]
[System.SerializableAttribute()]
public partial class BillOfOrderHeaderOrderDetailLZ9Dq20o : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {

[System.NonSerializedAttribute()]
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;

[System.Runtime.Serialization.OptionalFieldAttribute()]
private Artech.SpecialDataContract.Client.BillManagerService.OrderDetail[] DetailListField;

[System.Runtime.Serialization.OptionalFieldAttribute()]
private Artech.SpecialDataContract.Client.BillManagerService.OrderHeader HeaderField;

[global::System.ComponentModel.BrowsableAttribute(false)]
public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
get {
return this.extensionDataField;
}
set {
this.extensionDataField = value;
}
}

[System.Runtime.Serialization.DataMemberAttribute()]
public Artech.SpecialDataContract.Client.BillManagerService.OrderDetail[] DetailList {
get {
return this.DetailListField;
}
set {
if ((object.ReferenceEquals(this.DetailListField, value) != true)) {
this.DetailListField = value;
this.RaisePropertyChanged("DetailList");
}
}
}

[System.Runtime.Serialization.DataMemberAttribute()]
public Artech.SpecialDataContract.Client.BillManagerService.OrderHeader Header {
get {
return this.HeaderField;
}
set {
if ((object.ReferenceEquals(this.HeaderField, value) != true)) {
this.HeaderField = value;
this.RaisePropertyChanged("Header");
}
}
}

public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

protected void RaisePropertyChanged(string propertyName) {
System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if ((propertyChanged != null)) {
propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="OrderHeader", Namespace="http://schemas.datacontract.org/2004/07/Artech.SpecialDataContract.Contract")]
[System.SerializableAttribute()]
public partial class OrderHeader : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {

[System.NonSerializedAttribute()]
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;

[System.Runtime.Serialization.OptionalFieldAttribute()]
private System.DateTime OrderDateField;

[System.Runtime.Serialization.OptionalFieldAttribute()]
private System.Guid OrderIDField;

[global::System.ComponentModel.BrowsableAttribute(false)]
public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
get {
return this.extensionDataField;
}
set {
this.extensionDataField = value;
}
}

[System.Runtime.Serialization.DataMemberAttribute()]
public System.DateTime OrderDate {
get {
return this.OrderDateField;
}
set {
if ((this.OrderDateField.Equals(value) != true)) {
this.OrderDateField = value;
this.RaisePropertyChanged("OrderDate");
}
}
}

[System.Runtime.Serialization.DataMemberAttribute()]
public System.Guid OrderID {
get {
return this.OrderIDField;
}
set {
if ((this.OrderIDField.Equals(value) != true)) {
this.OrderIDField = value;
this.RaisePropertyChanged("OrderID");
}
}
}

public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

protected void RaisePropertyChanged(string propertyName) {
System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if ((propertyChanged != null)) {
propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="OrderDetail", Namespace="http://schemas.datacontract.org/2004/07/Artech.SpecialDataContract.Contract")]
[System.SerializableAttribute()]
public partial class OrderDetail : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {

[System.NonSerializedAttribute()]
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;

[System.Runtime.Serialization.OptionalFieldAttribute()]
private System.Guid ProductIDField;

[System.Runtime.Serialization.OptionalFieldAttribute()]
private int QuantityField;

[global::System.ComponentModel.BrowsableAttribute(false)]
public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
get {
return this.extensionDataField;
}
set {
this.extensionDataField = value;
}
}

[System.Runtime.Serialization.DataMemberAttribute()]
public System.Guid ProductID {
get {
return this.ProductIDField;
}
set {
if ((this.ProductIDField.Equals(value) != true)) {
this.ProductIDField = value;
this.RaisePropertyChanged("ProductID");
}
}
}

[System.Runtime.Serialization.DataMemberAttribute()]
public int Quantity {
get {
return this.QuantityField;
}
set {
if ((this.QuantityField.Equals(value) != true)) {
this.QuantityField = value;
this.RaisePropertyChanged("Quantity");
}
}
}

public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

protected void RaisePropertyChanged(string propertyName) {
System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if ((propertyChanged != null)) {
propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}
   为了使大家一眼就能了解整个结构,我对上面的代码进行简化:

namespace Artech.SpecialDataContract.Client.BillManagerService 
{
[DataContract]
public class BillOfOrderHeaderOrderDetailLZ9Dq20o
{
[DataMember]
public OrderHeader Header
{ get; set; }

[DataMember]
public OrderDetail[] DetailList
{ get; set; }
}

[DataContract]
public class OrderHeader
{
[DataMember]
public Guid OrderID
{ get; set; }

[DataMember]
public DateTime OrderDate
{ get; set; }
}

[DataContract]
public class OrderDetail
{
[DataMember]
public Guid ProductID
{ get; set; }

[DataMember]
public int Quantity
{ get; set; }
}

}
0
相关文章