Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关于类属性类型的WCF_C#_Wcf_Service_Datacontract_Datamember - Fatal编程技术网

C# 关于类属性类型的WCF

C# 关于类属性类型的WCF,c#,wcf,service,datacontract,datamember,C#,Wcf,Service,Datacontract,Datamember,好的,我正在构建我的WCF服务。我的代理无法为具有ListViewItem等类型的类生成代码,甚至无法为我已经定义的类对象生成代码 下面的两个例子是我试图通过的课程 示例#1 [DataContract] public class InvoiceCharges { #region Property... private int _invoiceChargeID; private ListViewItem _listViewItem; [DataMember]

好的,我正在构建我的WCF服务。我的代理无法为具有ListViewItem等类型的类生成代码,甚至无法为我已经定义的类对象生成代码

下面的两个例子是我试图通过的课程

示例#1

[DataContract]
public class InvoiceCharges {
    #region Property...
    private int _invoiceChargeID;
    private ListViewItem _listViewItem;

    [DataMember]
    public int InvoiceChargeID {
        get { return _invoiceChargeID; }
        set { _invoiceChargeID = value; }
    }
    [DataMember]
    public ListViewItem ListViewItem {
        get { return _listViewItem; }
        set { _listViewItem = value; }
    }
    #endregion
示例#2

[DataContract]
public class Users {
    #region Properties...
    private int _userID;
    private Divisions _Division = new Divisions();

    [DataMember]
    public int UserID {
        get { return _userID; }
        set { _userID = value; }
    }
    [DataMember]
    public Divisions Division {
        get { return _Division; }
        set { _Division = value; }
    }
在第二个例子中,我很困惑为什么它很难通过它已经看到的我的师级。当然WCF可以传递您自己的自定义对象??非常感谢您的帮助,我知道在其他平台上,为了序列化您自己的自定义对象,您必须对您的类执行一些特殊的操作。我不确定WCF是否自动处理了这个问题

编辑

在此方面的任何其他帮助仍将不胜感激

我还尝试将以下内容添加到InvoiceCharges类中,但仍然无法看到正确生成的代理

[KnownType(typeof(ListViewItem))]
此外,这也是代理的行为。我正在使用添加服务引用来执行此操作


看看它是如何生成几个“发票费用”的,这都是因为ListViewItem。我可以将DataMember属性从中删除,它很好。

ListViewItem是一个UI概念,在您的业务或服务代码中没有任何用途。重新考虑“数据”(模型),而不是用户所看到的,并重新调整类


您的问题是无法序列化。除非您想重写UI位以使其更易于序列化,否则重新考虑模型是您的最佳选择。

Divisions类是否也具有DataContract属性?是的,奇怪的是,当我从自定义对象(例如ListViewItem属性和Division属性)中删除[DataMember]属性时它在这方面遇到了麻烦。该类在客户端成功地生成了一个代理。我猜ListViewItem没有标记DataContract属性,因此这可能是问题所在。因为您没有发布代码,所以无法确定是否要在类的属性上放置DataContract?属性“DataContract”对此声明类型无效。它仅对“class、struct、enum”声明有效。值得一提的是,您不应该通过WCF发送ListViewItem实例(假设这些是框架中内置的LVI)。它们是一个UI构造。只需发送数据并在另一端构建新的LVI实例。