我将使用您创建 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 时一切正常。
当我使用可序列化时,实际变量(无论是私有(private)变量还是公共(public)变量)对主机可见,而不是属性。如果我使用 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 属性。这是为什么?
最佳答案
[DataContract]
属性是可选的。
那为什么要使用它呢?它允许您控制数据的序列化内容和方式 - 例如,要包含和排除哪些属性。
如果没有它也可以,那很好,但您可能很快就会发现需要更好地控制数据通过线路发送的内容和方式。
关于c# - 可序列化与数据契约与 WCF 服务中什么都没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3095695/