WCF服务中的Serializable vs Data Contract与Nothing完全无关

时间:2010-06-22 17:51:02

标签: c# wcf serialization

我将使用创建WCF服务时给出的Starter示例

[DataContract]
public class CompositeType
{
    bool boolValue = true;
    string stringValue = "Hello ";

    [DataMember]
    public bool BoolValue
    {
        get { return boolValue; }
        set { boolValue = value; }
    }

    [DataMember] 
    public string StringValue
    {
        get { return stringValue; }
        set { stringValue = value; }
    }
}

当我使用DataContract时,一切正常。

当我使用Serializable时,实际变量(无论是私有变量还是公共变量)都可以访问主机而不是属性。如果我使用NonSerialized它会隐藏变量但它也不会被传递。我明白了,我想我知道为什么没有传递属性,因为没有什么可以序列化?这是对的吗?

[Serializable]
public class CompositeType
{
    [NonSerialized]
    bool boolValue = true;
    [NonSerialized]
    string stringValue = "Hello ";


    public bool BoolValue
    {
        get { return boolValue; }
        set { boolValue = value; }
    }


    public string StringValue
    {
        get { return stringValue; }
        set { stringValue = value; }
    }
}

如果我没有提供任何属性,那么这个类会按预期返回,这个我不明白?

我的任务是获取现有的业务对象并通过WCF与它们一起工作?看起来我最好的选择就是不要添加DataContract属性。那是为什么?

1 个答案:

答案 0 :(得分:3)

[DataContract]属性是可选的。

为什么要使用它呢?它允许您控制数据的序列化内容和方式 - 例如,要包含哪些属性&排除。

如果没有它可以顺利完成,那很好,但您很快就会发现需要更好地控制通过网络发送数据的内容和方式。