1

タイプに以下を含む Web サービスサーバーからの WSDL があります。

<xs:element minOccurs="0" name="countryID" type="xs:int"/>

これは、countryID という名前のオプションの int 要素を表すと想定されています。それに対して (C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin から) svcutil.exe を実行すると、次のコードが生成されます。

[System.Runtime.Serialization.DataMemberAttribute()]
public int countryID
{
    get
    {
        return this.countryIDField;
    }
    set
    {
        this.countryIDField = value;
    }
}

"IsRequired=true" プロパティが DataMemberAttribute に設定されていません。しかし、特定のインスタンスが存在しないことを示す方法がわかりません! いくつかのグーグルは、「DataMemberAttribute(EmitDefaultValue = false)」を使用するように生成されたコード(私はやりたくない)を変更できることを明らかにしました(http://msdn.microsoft.com/en-us/library/aa347792.aspx?ppud=を参照) 4)。しかし、これを行うと、ゼロの countryID 値を使用することはできません。これはデフォルト値として解釈され、countryID 要素が生成されないためです。

「/serializer:XmlSerializer」コマンド ライン オプションを追加すると、次のように生成されます。

[System.Xml.Serialization.XmlElementAttribute(Order=0)]
public int countryID
{
    get
    {
        return this.countryIDField;
    }
    set
    {
        this.countryIDField = value;
    }
}

///
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool countryIDSpecified
{
    get
    {
        return this.countryIDFieldSpecified;
    }
    set
    {
        this.countryIDFieldSpecified = value;
    }
}

これは機能するはずです。countryIDFieldSpecified を「false」に設定しただけです。

これは DataContractSerializer とどのように連携するのでしょうか?

ありがとう!

4

0 に答える 0