2010-06-22 65 views
2

当你创建一个WCF服务序列化数据VS VS合同什么都在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时,实际的变量,无论是私有的还是公共的,都可以通过主机而不是属性来实现。如果我使用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属性。这是为什么?

回答

3

[DataContract]属性是可选的。

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

如果没有它,那很好,但您很快就会发现,您需要更好地控制通过电线发送数据的方式和方式。

+0

很好的答案!但是,迈克,你不应该尝试没有DataContract,因为它是面向WCF服务的。 ;) – maxbeaudoin 2010-06-22 20:28:07