通过应用[DataContract]到一个类,您告诉 WCF 您将明确声明哪些属性将由DataContractSerializer序列化。
默认情况下,如果没有[DataContract],DCS 将序列化所有公共属性,例如,如果您序列化 House 的实例,Window 和 Door 也将被完全序列化。
public class Window
{
public string Colour {get; set;}
public bool IsClean {get; set; }
}
public class Door
{
public string Colour {get; set;}
public bool IsOpen {get; set; }
}
public class House
{
public Door Door {get; set;}
public Window Window {get; set; }
}
通过比较,如果您[DataContract]在 House 上指定,则只有具有该[DataMember]属性的成员将被序列化,即在下面的情况下,只有 House 的 Address 属性将被序列化:
[DataContract]
public class House
{
[DataMember]
public string Address {get; set;}
// Omitted DataMember!
public Door Door {get; set;}
public Window Window {get; set; }
}
我猜测[DataContract]在您的情况下添加有效的原因可能是因为您已将其添加到根实体,但是在实体图“链”的某个位置,一个或多个复合实体没有该[DataMember]属性。如果您刚刚将根实体标记为[DataContract]没有[DataMember]s,那么只有根实体被序列化,从而避免了MaxItemsInGraph设置(但您的客户端显然不会收到任何未序列化的实体)。