是,創建Web服務的DataContract時,您標記要包含在服務請求,並與[DataMember]
屬性回覆的成員。
[DataContract]
[Serializable]
public class MyData
{
private int id_value;
// Apply the DataMemberAttribute to the property.
[DataMember]
public int ID
{
get { return id_value; }
set { id_value = value; }
}
public int DontExposeMeToWcf { get; set; }
}
編輯:在.NET 4.0中,你還可以使用[IgnoreDataMember]屬性來排除系列化的成員。從Using Data Contracts:
默認情況下,DataContractSerializer的 推斷數據合同串行化所有公開可見的類型。 所有公開的讀/寫屬性和類型的字段都是 序列化的。您可以通過使用 IgnoreDataMemberAttribute來選擇退出序列化成員。
只有與 未標記類型一起使用時,纔會遵守IgnoreDataMemberAttribute屬性。這包括未標記爲通過任何其他方式(例如IXmlSerializable)可序列化的DataContractAttribute,SerializableAttribute, CollectionDataContractAttribute或EnumMemberAttribute屬性或 之一的類型。
據我所知,您不需要在.NET 4中使用DataContract/DataMember來裝飾對象/屬性,以便通過WCF對它們進行序列化。我確實知道我試圖隱藏的這些屬性並未標記爲DataMembers,它們仍然是序列化的。 – Dimitri
@Dimitri包含它們仍然是最佳做法。 –
好的,我的方案是:我有一個MyClass類,它標記爲DataContract並具有標記爲DataMember的屬性。該類的某些屬性未標記爲DataMember,並且未被序列化。但是這個類繼承自標記爲Serializable的另一個類MyBaseClass,但不是DataContract。這個基類的屬性在序列化中顯示。所以如果我裝飾基類作爲DataContract,而不是裝飾它的屬性作爲DataMembers他們不應該序列化到Web服務? – Dimitri