当前位置:  开发笔记 > 编程语言 > 正文

构造函数没有出现在我的WCF客户端,序列化问题?

如何解决《构造函数没有出现在我的WCF客户端,序列化问题?》经验,为你挑选了2个好方法。

我的WCF服务中有一个简单的类,它似乎没有正确显示访问我的WCF的客户端.

我的类有4个类型为string的公共属性.

我使用[DataContract()]标记了类,并使用[DataMember]标记了每个成员.

为什么我的构造函数不可见?构造函数是否有特殊的[属性]?



1> Brian Genisi..:

数据契约与构造函数没有任何关系.因此,当您在客户端上创建代理时,您将只获得实现数据协定的类.

如果要在客户端添加类似的构造函数(假设生成的类型名为SomeDataItem),则可以使用分部类添加它:

public partial class SomeDataItem
{
    public SomeDataItem(int a, int b)
    {
        A = a;
        B = b;
    }
}



2> 小智..:

同意您可以将部分类添加到WCF客户端应用程序 - 您还可以将[OnDeserializing]和[OnDeserialized]方法添加到服务器端类以处理初始化等.

当我在寻找如何解决这个问题时,找到了以下很好的例子 - http://social.msdn.microsoft.com/forums/en-US/wcf/thread/447149d5-b44c-47cd-a690-20928244b52b /

[DataContract]
public class MyClassWithSpecialInitialization
{
    List myList;
    string str1;
    [DataMember]
    public string Str1
    {
        get { return str1; }
        set
        {
            this.myList.Add(value);
            str1 = value;
        }
    }
    string str2;
    [DataMember]
    public string Str2
    {
        get { return str2; }
        set
        {
            this.myList.Add(value);
            str2 = value;
        }
    }
    public MyClassWithSpecialInitialization()
    {
        this.myList = new List();
    }
    [OnDeserializing]
    public void OnDeserializing(StreamingContext context)
    {
        Console.WriteLine("Before deserializing the fields");
        this.myList = new List();
    }
    [OnDeserialized]
    public void OnDeserialized(StreamingContext context)
    {
        Console.WriteLine("After deserializing the fields... myList should be populated with the values of str1 and str2");
    }
}

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有