我已将第三方WSDL
(通过服务参考)导入我的控制台应用程序项目,以便通过Web服务发送和接收数据。为了使其正常运行,我必须在与Web Service关联的Reference.cs
文件中添加一些代码。虽然这有效,但如果对WSDL进行了更新,并且我重新导入/生成该服务引用,那么该解决方法将会消失。
为了解决这个问题,我已将必要的代码更改保存到项目中保存的外部文本文件中。
我很好奇是否有人知道我可以在服务引用之外将这些更改写入自己的单独类中,但仍然可以通过服务引用引用,因此使用“正确”代码需要从Web服务发送/接收。
我有两个类(未包含在生成的代码中),在将它们分成自己的.cs
文件并引用服务参考使用的namespace
后,我可以在生成的代码中引用它们
如果可能,我想做的是以下内容:
<小时/> 总体目标:
要实现这一目标,我需要能够:
Reference.cs
,带有自定义版本(请参阅下面的代码段#1)。partial class
替换为该类的自定义版本,具有不同的属性定义和略有不同的属性/字段定义。Snippet#1
替换以下内容:
partial class
这个版本的属性/字段在我更改生成的代码后起作用了:
private byte[] bulkExchangeFileField;
[System.Xml.Serialization.XmlElementAttribute(Namespace = "urn:us:gov:treasury:irs:common", DataType = "base64Binary", Order = 0)]
public byte[] BulkExchangeFile
{
get { return this.bulkExchangeFileField; }
set
{
this.bulkExchangeFileField = value;
this.RaisePropertyChanged("BulkExchangeFile");
}
}
答案 0 :(得分:0)
使用扩展方法和/或重载inhered类中的属性,因此不会替换您的代码。
要重载属性,您只需要在公共之前使用单词new声明它,如:new public BulkExchangeFileType BulkExchangeFile
,因此当您使用该对象时,它将调用您的属性而不是Web服务定义的属性
以下是如何创建扩展方法https://msdn.microsoft.com/library/bb383977.aspx
class Program
{
static void Main(string[] args)
{
InheredClass test = new InheredClass(); // Do this
BaseClass test2 = new InheredClass(); // don't do this
Console.WriteLine(test.MyProperty.GetType());
Console.WriteLine(test2.MyProperty.GetType());
Console.Read();
}
class BaseClass
{
public int MyProperty { get; set; }
}
class InheredClass : BaseClass
{
new public decimal MyProperty { get; set; }
}
}