WCF反序列化,不会调用构造函数,如何解决类的初始化问题

WCF反序列化,不会调用构造函数,如何解决类的初始化问题?遇到了这个问题,找了一些资料最终解决了这个问题。关键是两个特性:

[OnDeserializing]

[OnDeserialized]

看一下代码:

   [DataContract]
    public class MyDataType
    {
        [DataMember]
        private List<int> nVal = new List<int>();
        public MyDataType()
        {
            nVal.Add(12);
        }

        [OnDeserializing]
        void BeginInit(StreamingContext sc)
        {
            Console.WriteLine("same to begin Constructor");
        }

        [OnDeserialized]
        void EndInit(StreamingContext sc)
        {
            Console.WriteLine("same to end Constructor");
        }

        [DataMember]
        public int InitMemberData
        {
            get { return 0; }
            set {
                object obj = this;
                Console.WriteLine("InitMemberData: set.");
            }
        }

        private int intv;
        [DataMember]
        public int INT
        {
            get
            {
                return intv;
            }
            set
            {
                Console.WriteLine("INT: set.");
                if(nVal == null)
                    intv = value;
            }
        }
        string _str;
        [DataMember]
        public string STRING
        {
            get { return _str; }
            set {
                Console.WriteLine("STRING: set.");
                _str = value;
            }
        }
        long _long;
        [DataMember]
        public long LONG
        {
            get { return _long; }
            set
            {
                Console.WriteLine("LONG: set.");
                _long = value;
            }
        }

    }

  反序列化时的输出:

时间: 2024-11-08 10:29:03

WCF反序列化,不会调用构造函数,如何解决类的初始化问题的相关文章

WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭

原文:WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭 在我们开发WCF项目的时候,常常会碰到一些莫名其妙的错误,有时候如果根据它的错误提示信息,一般很难定位到具体的问题所在,而由于WCF服务的特殊性,调试起来也不是那么方便,因此往往会花费不少时间来进行跟踪处理.本文介绍我在我在我的框架里面使用WCF服务的时候,出现的一个常见错误的处理方法,它的提示信息是:基础连接已经关闭: 连接被意外关闭.这种情况我碰到的有两种,一种是返回DataTable的时候出现的,一种是返回实体类

java调用静态函数时是否会调用构造函数

今天在看<think in java>时,有个问题没搞懂:在调用一个静态函数时,该类的构造函数是否会被调用.在网上并未找到相关内容,不如动手来试试结果. 1 public class test { 2 public test() { 3 System.out.println("constructor"); 4 } 5 public static void print() { 6 System.out.println("static"); 7 } 8 pu

arcgis安装msi安装包提示&quot;在未标记为正在运行时,调用了RunScript”解决办法

安装msi安装包提示"在未标记为正在运行时,调用了RunScript”解决办法 windows/temp目录相关权限不对,右击temp文件夹,选择管理员获取所有权限.

WCF服务开发与调用的完整示例

开发工具:VS2008 开发语言:C# 开发内容:简单的权限管理系统 第一步.建立WCF服务库 点击确定,将建立一个WCF 服务库示例程序,自动生成一个包括IService1.cs和Service1.cs两个类文件.我们可以直接对其修改开发我们的服务,但一般直接删除. 第二步:开发实体类 在解决方案中,添加新类Module.cs 在类中要首先引入using System.Runtime.Serialization命名空间 实体类具体代码如下: namespace WcfServiceLib.mo

[C++基础]在构造函数内部调用构造函数

看下面的面试题: #include <iostream> using namespace std; struct CLS { int m_i; CLS( int i ) : m_i(i){} CLS() { CLS(0); } }; int main() { CLS obj; cout << obj.m_i << endl; return 0; } 打印的结果是系统的一个随机值.所以这种直接在构造函数中调用另外的一个构造函数是不可行的. 代码奇怪的地方在于构造函数中调用

WCF 配置终结点并调用服务

wcf通过xml文件配置终结点什么的感觉有点小麻烦,个人还是觉得用代码形式配置比较好,当然在发布的时候可能会比较麻烦,需要重新编译... 下面将wcf service寄宿在控制台应用程序中并配置终结点: ? 1 2 3 4 5 6 7 8 9 10 11 using (var host = new ServiceHost(typeof(Service1),                                               new Uri("http://localhos

VC6.0编译DLL,使用VS2010调用问题及解决方法

1.做驱动的时候,做应用程序需要和驱动通信,必须建立一个DLL. 2.因为客户使用版本太低,需要使用到VC6.0编写DLL 3.在VC6.0上编写DLL的时候,导出的函数名会出现和原函数名不对,导致调用失败 4.解决办法, 找到VC6.0工程下面的文件   ***.DEF. 把里面的   LIBRARY  后面输入要导出的DLL的文件名.如: LIBRARY      "pc104dll" 在EXPORTS后面输入要导出的函数名,整个文件内容入下: LIBRARY      "

vs自动生成的WebService配置文件在部署到IIs6后,服务调用失败的解决方法

近日,在项目中需要引用java发布的WebService,添加服务引用后,调用一切正常. 配置如下: <system.serviceModel> <bindings> <basicHttpBinding> <binding name="SecurityServiceImplServiceSoapBinding" maxBufferPoolSize="2147483647" maxReceivedMessageSize=&qu

转:WCF服务开发与调用的完整示例

转:http://blog.csdn.net/fxhflower/article/details/7274925 WCF服务开发与调用的完整示例 开发工具:VS2008 开发语言:C# 开发内容:简单的权限管理系统 第一步.建立WCF服务库 点击确定,将建立一个WCF 服务库示例程序,自动生成一个包括IService1.cs和Service1.cs两个类文件.我们可以直接对其修改开发我们的服务,但一般直接删除. 第二步:开发实体类 在解决方案中,添加新类Module.cs 在类中要首先引入usi