代码之家  ›  专栏  ›  技术社区  ›  Mike

在WCF服务中可序列化vs数据协定vs完全不存在

  •  2
  • Mike  · 技术社区  · 16 年前

    我将使用在创建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; }
        }
    }
    

    当我使用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属性。为什么?

    1 回复  |  直到 12 年前
        1
  •  3
  •   Jay    16 年前

    这个 [DataContract] 属性是可选的。

    如果你可以不用它,这是很好的,但你可能很快就会发现,你需要更大的控制什么和如何数据通过电线发送。

    推荐文章