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

本文关键字:引用 NULL 成员 专用 WCF DataContract | 更新日期: 2023-09-27 18:29:58

我在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.
            }
        }
    }       
}

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

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

一些参考:DataContractSerializer没有';t调用我的构造函数?

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

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

[OnDeserializing]
private void OnDeserializing(StreamingContext c)
{
    _Wagon = initializeWagon();
}

然而,正如您可能注意到的,在反序列化过程中,您将无法通过Wagon——您必须以不同的方式对其进行初始化。

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

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