我在 Web 服务层的 WCF 中有一个特殊问题。
当我在 WCF 中实例化我的类的私有(private)成员 (_Wagon)(此实例化不为空)时,几秒钟后,它变为空。
我一直在尝试诊断问题,但到目前为止还没有结果。
所以我求助于你们帮助我解决这个问题。
谢谢。
因此有我的代码:
[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.
}
}
}
}
最佳答案
如果您的类已被 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]
属性
关于c# - DataContract 类中的 WCF 私有(private)成员引用变为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9982287/