排除WCF DataContract上的属性

时间:2013-03-15 01:51:43

标签: wcf serialization

给定这样的WCF接口定义,有没有办法从ComplexObject响应值中排除属性?

我想要排除ChildObjects属性。我不想从属性定义中删除DataMember属性,因为我需要在另一种情况下将其序列化。

[ServiceContract]
public interface IComplexObjectService
{
    [OperationContract]
    ComplexObject Test(int a);
}

ComplexObject的定义如下:

[DataContract(IsReference = true)]
public class ComplexObject 
{
    [DataMember]
    public long ObjectCode
    {
        get { return _ObjectCode; }
        set { _ObjectCode = value; }
    }

    [DataMember]
    public List<ComplexObject> ChildObjects
    {
        get { return _ComplexObject; }
        set { _ComplexObject = value; }
    }
}

2 个答案:

答案 0 :(得分:1)

如果您不想在ComplexObject中公开ChildObjects属性,则必须删除DataMember属性。如果你有另一个需要ChildObjects的用例,那么我建议你有一个单独的ComplextObject,它有它。您不能在运行时打开或关闭它,因为它会违反合同定义。

答案 1 :(得分:0)

[DataContract(IsReference = true)]
public class ComplexObject 
{
public ComplexObject()
{
 ChildObjects=null;
}
[DataMember]
public long ObjectCode
{
    get { return _ObjectCode; }
    set { _ObjectCode = value; }
}

[DataMember]
public List<ComplexObject> ChildObjects
{
    get { return _ComplexObject; }
    set { _ComplexObject = value; }
}
}