c# - DataContract 类中的 WCF 私有(private)成员引用变为 NULL

标签 c# wcf web-services private datacontract

我在 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/

相关文章:

c# - Brushes.White 使图形演示变慢

java - 不同类型的 Web 服务

java - Eclipse 创建的 Web 服务出错

java - Netbeans 调试 Web 服务和 Web 客户端

c# - 根据滚动位置动态显示 ComboBox 的元素

c# - "Invalid Character in Base-64 String"使用 ASP.NET 和 C#

c# - 在 VS2010 中调试 COM dll

javascript - 如何将从 jquery mobile 表单输入的查询 SQL 发布到 WCF 服务并在 WCF 服务上运行该查询?

wcf - 替换WCF默认JSON序列化

web-services - 版本控制 SOAP 主体与整个服务?