C# 代理类定义缺少指定的属性

C# 代理类定义缺少指定的属性,c#,xml,web-services,soap,xsd,C#,Xml,Web Services,Soap,Xsd,我正在引用一个外部SOAP服务(我指的是由另一个开发团队创建的外部SOAP服务)作为.NET服务层中的服务引用 我以前多次执行过这种类型的操作,通常生成的代理将包含一个带有数据字段的类结构,然后指定FieldSpecified属性以允许选择性填充这些字段 这种方法工作得很好,因为它基本上是将信息传递回另一个应用程序,以更新其数据库中的某些字段 下面是过去生成的具有所需行为的示例类: [System.CodeDom.Compiler.GeneratedCodeAttribute("System.X

我正在引用一个外部SOAP服务(我指的是由另一个开发团队创建的外部SOAP服务)作为.NET服务层中的服务引用

我以前多次执行过这种类型的操作,通常生成的代理将包含一个带有数据字段的类结构,然后指定
FieldSpecified
属性以允许选择性填充这些字段

这种方法工作得很好,因为它基本上是将信息传递回另一个应用程序,以更新其数据库中的某些字段

下面是过去生成的具有所需行为的示例类:

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://www.sampleproxyclass.com/updatecustomer")]
public partial class Customer : object, System.ComponentModel.INotifyPropertyChanged {


    private string CustomerName;

    private System.Nullable<System.DateTime> dateOfBirthField;

    private bool dateOfBirthFieldSpecified;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Order=1)]
    public string CustomerName{
        get {
            return this.CustomerName;
        }
        set {
            this.CustomerName= value;
            this.RaisePropertyChanged("CustomerName");
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(DataType="date", IsNullable=true, Order=4)]
    public System.Nullable<System.DateTime> dateOfBirth{
        get {
            return this.dateOfBirthField;
        }
        set {
            this.dateOfBirthField= value;
            this.RaisePropertyChanged("dateofBirth");
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool dateOfBirthFieldSpecified{
        get {
            return this.dateOfBirthFieldSpecified;
        }
        set {
            this.dateOfBirthFieldSpecified= value;
            this.RaisePropertyChanged("dateOfBirthFieldSpecified");
        }
    }

}
[System.CodeDom.Compiler.GeneratedCodeAttribute(“System.Xml”,“4.0.30319.17929”)]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(“代码”)]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true,命名空间=”http://www.sampleproxyclass.com/updatecustomer")]
公共部分类客户:对象,System.ComponentModel.INotifyPropertyChanged{
私有字符串客户名称;
私有系统。可为空的BirthField日期;
指定的BirthField的私有布尔日期;
/// 
[System.Xml.Serialization.XmlElementAttribute(顺序=1)]
公共字符串客户名称{
得到{
退回这个。客户名称;
}
设置{
this.CustomerName=值;
本.RaisePropertyChanged(“客户名称”);
}
}
/// 
[System.Xml.Serialization.xmlementAttribute(DataType=“date”,IsNullable=true,Order=4)]
公共系统。可为空的出生日期{
得到{
返回此.dateOfBirthField;
}
设置{
此.dateOfBirthField=值;
本次募捐财产变更(“出生日期”);
}
}
/// 
[System.Xml.Serialization.XmlIgnoreAttribute()]
指定了公共bool出生日期字段{
得到{
返回指定的此.DateOfBirthField;
}
设置{
指定的.dateOfBirthField=值;
此.RaisePropertyChanged(“指定的出生日期字段”);
}
}
}
由于某些原因,此最新服务根本不会生成指定的
字段属性,这给我们带来了一个主要的集成难题。我无法控制XSD规范或创建,但我一直在尝试帮助负责XSD的团队更改定义,以便它按照我的示例中的上述方式生成代理

我认为关键是在定义中添加
minOccurs=“0”
,但这并没有奏效。我还让他们尝试
nillable=“true”
,但同样没有乐趣

所以我的问题是,当服务引用添加到.NET项目中时,是什么XSD配置驱动了
字段指定的
属性的创建


我正在使用VS2013,框架4.5.1。

只是为了回答您的问题;根据MSDN,这种语法应该为您提供可为空的类型

   <xs:element minOccurs="1" maxOccurs="1" name="NameNullable" nillable="true" type="xs:string" />

不幸的是,这从来都不是直截了当的。在过去,我编写了自己的工具来更改VS生成的代码。你也可能需要做一些类似的事情

我只是在stackoverflow上搜索了类似的问题,我发现了。
一些人评论说,他们编写了自己的工具来处理此类问题。似乎没有简单的出路。

只是回答你的问题;根据MSDN,这种语法应该为您提供可为空的类型

   <xs:element minOccurs="1" maxOccurs="1" name="NameNullable" nillable="true" type="xs:string" />

不幸的是,这从来都不是直截了当的。在过去,我编写了自己的工具来更改VS生成的代码。你也可能需要做一些类似的事情

我只是在stackoverflow上搜索了类似的问题,我发现了。
一些人评论说,他们编写了自己的工具来处理此类问题。似乎没有简单的解决办法。

您使用什么来生成这些类?@KosalaW只是标准的VS IDE生成器-通过向我的项目添加新的服务引用。我在过去遇到过这种情况。就我记忆所及,这就是我所做的。我让他们把xsd发给我。然后我使用XSD2代码生成我的引用类。使用这些引用,我托管了自己的wcf服务。然后我使用我的wcf服务创建了一个客户端。我多次摆弄xsd,直到它给了我想要的客户端。你用什么来生成这些类?@KosalaW只是标准的VS IDE生成器-通过向我的项目添加一个新的服务引用。我在过去遇到过这种情况。就我记忆所及,这就是我所做的。我让他们把xsd发给我。然后我使用XSD2代码生成我的引用类。使用这些引用,我托管了自己的wcf服务。然后我使用我的wcf服务创建了一个客户端。我多次摆弄xsd,直到它给了我想要的客户端。感谢信息,我们仍在处理此问题,因此我会在我有一些信息时发布更多信息。感谢信息,我们仍在处理此问题,因此我会在有一些信息时发布更多信息。