Недавно я пытался сгенерировать контракты данных из файлов xsd, используя svcutil так:
svcutil.exe /t:code /dconly /out:MyContract.cs /n:*,My.Namespace MyDataDefinition.xsd
XSD в основном состоит из таких определений:
<xsd:complexType name="SomeComplexObjectType">
<xsd:sequence>
<xsd:element name="FirstData" type="xsd:string" minOccurs="0" />
<xsd:element name="SecondData" type="xsd:string" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
svcutil генерирует что-то вроде этого:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="SomeComplexObjectType")]
public partial class PersonInfo : object, System.Runtime.Serialization.IExtensibleDataObject
{
private string FirstDataField;
private string SecondDataField;
[System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)]
public string FirstData
{
get
{
return this.FirstDataField;
}
set
{
this.FirstDataField= value;
}
}
[System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)]
public string SecondData
{
get
{
return this.SecondDataField;
}
set
{
this.SecondDataField= value;
}
}
}
Что работает нормально, однако, атрибуты "EmitDefaultValue = false" не нужны. Не говоря уже о том, что он вносит много шума в wsdl, добавляя такие вещи:
<xsd:element minOccurs="0" name="FirstData" nillable="true" type="xsd:string">
<xsd:annotation>
<xsd:appinfo>
<DefaultValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/" EmitDefaultValue="false"/>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
В настоящее время я просто редактирую сгенерированный контракт вручную, но это не идеально с точки зрения обслуживания.
Кто-нибудь знает, как предотвратить автоматическое создание svcutil этих атрибутов EmitDefaultValue = false?