首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataContract类中的WCF私有成员引用变为空

DataContract类中的WCF私有成员引用变为空
EN

Stack Overflow用户
提问于 2012-04-03 03:04:37
回答 2查看 1.4K关注 0票数 4

我在web服务层的WCF中遇到了严重的问题。

当我在WCF中实例化我的类的私有成员(_Wagon)时(这个实例化不是空的),几秒钟后,它变成了空的。

我一直在尝试诊断这个问题,但到目前为止还没有结果。

所以我希望你们能帮我解决这个问题。

谢谢。

因此,下面是我的代码:

代码语言:javascript
复制
[DataContract]
public class RemoteWagon
{
    private readonly IWagon _Wagon;

    public RemoteWagon(IWagon Wagon)
    {
        _Wagon = Wagon; //_Wagon isn't null here
    }

    ~RemoteWagon()
    {
        Trace.WriteLine("Do nothing");
    }       

    [DataMember]
    public RemoteBreakpoint Breakpoint
    {
        set
        {
            if (value == null)
            {
                _Wagon.Breakpoint = null; //_Wagon member is NULL...
            }
            else
            {
                //... useless code in this context.
            }
        }
    }       
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-03 03:28:10

如果您的类已经被DataContractSerializer序列化和反序列化(例如,在客户端和服务器之间发送数据时),就会发生这种情况。

一些参考:DataContractSerializer doesn't call my constructor?

如果是这样,那么对我有效的一种可能的解决方案是:https://stackoverflow.com/a/9419943/724944

因此,对于这个问题的快速检查和修复(我假设您希望自己初始化字段,而不是序列化它)将是创建方法:

代码语言:javascript
复制
[OnDeserializing]
private void OnDeserializing(StreamingContext c)
{
    _Wagon = initializeWagon();
}

但是,正如您可能注意到的,您将无法在反序列化过程中传递able您必须以不同的方式对其进行初始化。

另一方面,如果您希望序列化_Wagon,则将其作为public [DataMember]属性公开

票数 2
EN

Stack Overflow用户

发布于 2012-04-03 03:27:01

看起来,如果你想序列化_Wagon,你应该把它标记为一个DataMember,并去掉它的"readonly“。如果你不想序列化它,向我们展示你的代码来构造和填充这个对象。

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

https://stackoverflow.com/questions/9982287

复制
相关文章

相似问题

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