是否有任何开关指示svcutil
使用代码中定义的名称生成DataContract
属性?例如,当我创建使用以下DataContract
的代理时:
[DataContract(Namespace = "http://schemas.mynamespace.com/2012/08")]
public class MyDataContract
{
[DataMember(IsRequired = true, Order = 0)]
private int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
}
我在代理生成的类上得到了这个DataContract
:
public partial class MyDataContract : object
{
private int _idField;
[System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)]
public int _id
{
get
{
return this._idField;
}
set
{
this._idField = value;
}
}
}
对于前3个属性,DataMemberAttribute
的order属性总是被省略,而MessageContract
省略IDisposable
实现。
答案 0 :(得分:1)
在DataMember属性
上使用name属性如:
[DataMember(Name="myname")]
答案 1 :(得分:1)
好吧,我无法对省略的order
发表评论,但我可以帮助完成剩下的工作:
通常在属性上指定DataMember
属性,而不是在字段上。数据契约本身不区分属性和字段,但它知道名称,类型,是否是必需的等等。
已添加:Chris说的是:使用[DataMember(Name="whateveryouwant")]
,您可以设置与字段/属性名称不同的名称。我不喜欢这样的用法,但是在重构代码时它很有用,但仍然保持API兼容。
只有其他DataContract
(以及一些内在支持的)类型被序列化到/来自消息。 IDisposable似乎不是一个。
序列化IDisposable
的继承MessageContract
没有任何意义。消息契约是SOAP消息的.NET表示。除了在SOAP消息XML中的内容和可访问的.NET类型之间提供1:1映射之外,它没有别的办法。
消息是ServiceContract
的一部分,因为它指定必须将哪种消息发送到某个操作才能成为有效调用,而另一个(响应)消息合同指定数据如何,即操作返回,将是结构化的。没有其他的;它是一个数据聚合。
如果要在客户端捕获服务操作的结果,并且为方便起见,在超出范围时自动发回消息(或者例如从服务中取消注册),则必须在客户端。但请注意,服务不得要求发生这种情况(由于连接丢失,崩溃等)。