【问题标题】:Serializable vs Data Contract vs Nothing at all in a WCF Service可序列化 vs 数据契约 vs WCF 服务中什么都没有
【发布时间】:2013-11-22 18:03:09
【问题描述】:

我将使用创建 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 属性。这是为什么呢?

【问题讨论】:

    标签: c# wcf serialization


    【解决方案1】:

    [DataContract] 属性是可选的。

    那为什么还要使用它呢?它使您可以控制数据的序列化内容和方式——例如,要包含和排除哪些属性。

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

    【讨论】:

    • 很好的答案!但是,Mike,您不应该尝试没有 DataContract,因为它是面向 WCF 服务的。 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多