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

时间:2012-04-02 19:04:37

标签: c# wcf web-services private datacontract

我在Web服务层的WCF中存在一个问题。

当我在WCF中实例化我的类的私有成员(_Wagon)(此实例化不为null)时,几秒钟后,它变为null。

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

所以我转向你们,帮助我解决这个问题。

谢谢。

因此有我的代码:

[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.
            }
        }
    }       
}

2 个答案:

答案 0 :(得分:2)

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

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

如果是这种情况,那么一个可行的解决方案对我有用:https://stackoverflow.com/a/9419943/724944

因此,快速检查并解决此问题(我假设您想自己初始化字段而不是序列化)将创建方法:

[OnDeserializing]
private void OnDeserializing(StreamingContext c)
{
    _Wagon = initializeWagon();
}
但是,正如您可能已经注意到的那样,在反序列化过程中您无法通过Wagon - 您必须以不同方式初始化它。

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

答案 1 :(得分:1)

似乎如果你想要_Wagon序列化,你应该将它标记为DataMember并抛弃“readonly”。如果您不希望序列化,请向我们展示构建和填充此对象的代码。