我将使用创建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属性。那是为什么?
答案 0 :(得分:3)
[DataContract]
属性是可选的。
为什么要使用它呢?它允许您控制数据的序列化内容和方式 - 例如,要包含哪些属性&排除。
如果没有它可以顺利完成,那很好,但您很快就会发现需要更好地控制通过网络发送数据的内容和方式。