次の問題があります。Visual Studio 2008 Web参照プロキシクラスでxml属性がデコードされない
Webサービスを使用するためのクライアントコードを記述しています。ここでは、Webサービスからの回答されています
HTTP/1.0 200 OK
Content-Type: text/xml; charset=utf-8
Connection: close
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<conc:GetProductsListResponse xmlns:conc="http://tempuri.org/XMLSchema.xsd">
<conc:Result>
<conc:Products>
<conc:Product conc:ProductID="4C475A0126111982" conc:GroupID="Default" />
</conc:Products>
</conc:Result>
</conc:GetProductsListResponse>
</soap:Body>
</soap:Envelope>
ここでは、この作品での.xsdおよび.wsdlファイルからの定義です:
<xs:element name="GetProductsListResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Result">
<xs:complexType>
<xs:sequence>
<xs:element name="Products" type="ProductsType" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="ProductsType">
<xs:choice>
<xs:element name="Product" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="ProductID" type="xs:string"/>
<xs:attribute name="GroupID" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="Error">
<xs:complexType>
<xs:attribute name="ErrorID" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
私は参照を追加するには、Add Web参照を使用していました。 .NET 2.0スタイルのWebサービスを使用しました。ここで
が生成されたプロキシクラスです:
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.4927")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://tempuri.org/XMLSchema.xsd")]
public partial class GetProductsListResponse {
private GetProductsListResponseResult resultField;
/// <remarks/>
public GetProductsListResponseResult Result {
get {
return this.resultField;
}
set {
this.resultField = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.4927")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://tempuri.org/XMLSchema.xsd")]
public partial class GetProductsListResponseResult {
private ProductsType productsField;
/// <remarks/>
public ProductsType Products {
get {
return this.productsField;
}
set {
this.productsField = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.4927")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/XMLSchema.xsd")]
public partial class ProductsType {
private ProductsTypeProduct[] itemsField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("Product")]
public ProductsTypeProduct[] Items {
get {
return this.itemsField;
}
set {
this.itemsField = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.4927")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://tempuri.org/XMLSchema.xsd")]
public partial class ProductsTypeProduct {
private string productIDField;
private string groupIDField;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string ProductID {
get {
return this.productIDField;
}
set {
this.productIDField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string GroupID {
get {
return this.groupIDField;
}
set {
this.groupIDField = value;
}
}
}
問題は、Webサービスがデシリアライズされますとき、ある、商品コードとグループIDは、何らかの理由(彼らはnullに残されている)直列化復元されません。
あなたは最高です! Btw、修飾された属性名は何ですか?また、修飾されていない属性との違いは何ですか? – Bogi
@Bogi修飾された属性には、名前空間接頭辞(例では "conc")が含まれます。指定した例は、修飾された属性を使用しています: ' '各属性に先行する「conc:」は、属性を「修飾」にするものです。これらの属性が未修飾の場合、この要素は次のようになります。 ' ' –
pmartin