首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WCF DataContract序列化只读属性?

WCF DataContract序列化只读属性?
EN

Stack Overflow用户
提问于 2009-08-27 20:25:21
回答 2查看 10.2K关注 0票数 14

每当我使用WCF时,我总是试图创建不可变的类,这些类最终会遍历网络(例如,在构造函数中设置的参数,属性是只读的)。然而,这阻碍了WCF序列化,它要求所有属性都是Public get/set (这是有意义的,因为它必须反序列化它们)

即使在this related post中,我也看到他们的解决方案最终将所有内容公之于众,这违背了我对优秀编程的看法。有什么办法可以解决这个问题吗?我是不是必须满足于这个解决方案,或者像冰棒一样的东西,并对此感到高兴?

我尝试的另一件事是这样的,我有一个所有东西的基类和一个派生类,这个派生类让set变得无用:

代码语言:javascript
运行
复制
/// <summary>
/// This represents a discovered virtual-machine template that can be
/// instantiated into a RunningVirtualMachine
/// </summary>
[DataContract]
[XmlRoot("VMTemplate")]
public class VirtualMachineTemplateBase
{
    [DataMember]
    public virtual ulong SizeInBytes { get; set; }
}

/// <summary>
/// This class is the real guts of VirtualMachineTemplate that we're hiding
/// from the base class.
/// </summary>
[XmlInclude(typeof(VirtualMachineTemplateBase))]
public class VirtualMachineTemplate : VirtualMachineTemplateBase, IXmlPicklable, IEnableLogger
{
    ulong _SizeInBytes;
    public override ulong SizeInBytes {
        get { return _SizeInBytes; }
        set { }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-27 20:30:39

如果你使用DataContractSerializer (这是WCF的默认设置),你可以序列化任何用[DataMember]属性修饰的内容--甚至是只读字段:

代码语言:javascript
运行
复制
[DataContract]
public class VirtualMachineTemplate : VirtualMachineTemplateBase, IXmlPicklable, IEnableLogger
{
    [DataMember]
    ulong _SizeInBytes;
}

但是您需要使用DataContractSerializer,而不是XML序列化程序。可扩展标示语言序列化程序只能序列化公共属性(它会序列化公共属性,除非您在它们上放置了XmlIgnore )。

DataContractSerializer是不同的:

它不需要无参数的默认构造函数,它只序列化你用[DataMember]

  • but显式标记的东西,可以是任何东西-一个字段,一个属性,以及任何可见性(私有的,受保护的,公共的)

  • 它比XmlSerializer快一点,但你不能对XML的形状有太多的控制-你只能对它包含的内容有发言权

有关更多提示和技巧,请参阅此blog post和此blog post

Marc

票数 14
EN

Stack Overflow用户

发布于 2013-11-22 21:00:55

要同时确保不可变性和易于实现,请为该属性添加一个私有setter来服务于反序列化。在引擎盖下发生了很多事情,但它是有效的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1343566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档