C# WCF服务中的可序列化vs数据契约vs完全不存在

C# WCF服务中的可序列化vs数据契约vs完全不存在,c#,wcf,serialization,C#,Wcf,Serialization,我将使用创建WCF服务时给出的初学者示例 [DataContract] public class CompositeType { bool boolValue = true; string stringValue = "Hello "; [DataMember] public bool BoolValue { get { return boolValue; } set { boolValue = value; }

我将使用创建WCF服务时给出的初学者示例

[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时,实际的变量,无论是私有的还是公共的,对主机而不是属性都是可见的。如果我使用非序列化,它会隐藏变量,但也不会传递。我明白了,我想我明白了为什么没有传递属性,因为没有要序列化的内容?对吗

[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属性。这是为什么?

属性是可选的

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


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

回答得很好!但是,Mike,没有DataContract,您不应该尝试过日子,因为它是面向WCF服务的