2012-03-12 77 views
0

我对访问我生成的类的属性有问题。访问由XSD生成的类

这是我的xml:

<?xml version="1.0" encoding="UTF-8"?> 
<e:Envelope xmlns:e="http://www.w3.org/2003/05/soap-envelope" 
xmlns:w="http://schemas.xmlsoap.org/ws/2004/08/addressing" 
xmlns:d="http://schemas.xmlsoap.org/ws/2005/04/discovery" 
xmlns:dn="http://www.onvif.org/ver10/network/wsdl"> 
    <e:Header> 
    <w:MessageID>uuid:84ede3de-7dec-11d0-c360-f</w:MessageID> 
    <w:To e:mustUnderstand="true">urn:schemas-xmlsoap-org:ws:2005:04:discovery</w:To> 
    <w:Action mustUnderstand="true"> 
     http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe 
    </w:Action> 
    </e:Header> 
    <e:Body> 
    <d:Probe> 
     <d:Scopes></d:Scopes> 
     <d:Types>dn:NetworkVideoTransmitter</d:Types> 
    </d:Probe> 
    </e:Body> 
</e:Envelope> 

这是我生成的XSD(三选一):

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema id="Envelope" targetNamespace="http://www.w3.org/2003/05/soap-envelope" 
xmlns:mstns="http://www.w3.org/2003/05/soap-envelope" 
xmlns="http://www.w3.org/2003/05/soap-envelope" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft 
com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified" 
xmlns:app1="http://schemas.xmlsoap.org/ws/2004/08/addressing" 
xmlns:app2="http://schemas.xmlsoap.org/ws/2005/04/discovery"> 
    <xs:import namespace="http://schemas.xmlsoap.org/ws/2005/04/discovery" schemaLocation="Probe_app2.xsd" /> 
    <xs:import namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing" schemaLocation="Probe_app1.xsd" /> 
    <xs:attribute name="mustUnderstand" msdata:Prefix="e" type="xs:string" /> 
    <xs:element name="Envelope" msdata:IsDataSet="true" msdata:Locale="en-US" msdata:Prefix="e"> 
    <xs:complexType> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
     <xs:element name="Header" msdata:Prefix="e"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="app1:MessageID" minOccurs="0" /> 
        <xs:element ref="app1:To" /> 
       <xs:element ref="app1:Action" /> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     <xs:element name="Body" msdata:Prefix="e"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="app2:Probe" /> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:choice> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

最后,这是从xsd2code我生成的类:

namespace PROBE 
{ 
using System; 
using System.Diagnostics; 
using System.Xml.Serialization; 
using System.Collections; 
using System.Xml.Schema; 
using System.ComponentModel; 
using System.IO; 
using System.Text; 
using System.Collections.Generic; 


[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] 
[System.SerializableAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.w3.org/2003/05/soap-envelope")] 
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://www.w3.org/2003/05/soap-envelope", IsNullable = false)] 
public partial class Envelope 
{ 

    private List<object> itemsField; 

    private static System.Xml.Serialization.XmlSerializer serializer; 

    public Envelope() 
    { 
     this.itemsField = new List<object>(); 
    } 

    [System.Xml.Serialization.XmlElementAttribute("Body", typeof(EnvelopeBody), Order = 0)] 
    [System.Xml.Serialization.XmlElementAttribute("Header", typeof(EnvelopeHeader), Order = 0)] 
    public List<object> Items 
    { 
     get 
     { 
      return this.itemsField; 
     } 
     set 
     { 
      this.itemsField = value; 
     } 
    } 

    private static System.Xml.Serialization.XmlSerializer Serializer 
    { 
     get 
     { 
      if ((serializer == null)) 
      { 
       serializer = new System.Xml.Serialization.XmlSerializer(typeof(Envelope)); 
      } 
      return serializer; 
     } 
    } 
} 

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] 
[System.SerializableAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.w3.org/2003/05/soap-envelope")] 
public partial class EnvelopeBody 
{ 

    private Probe probeField; 

    private static System.Xml.Serialization.XmlSerializer serializer; 

    public EnvelopeBody() 
    { 
     this.probeField = new Probe(); 
    } 

    [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.xmlsoap.org/ws/2005/04/discovery", Order = 0)] 
    public Probe Probe 
    { 
     get 
     { 
      return this.probeField; 
     } 
     set 
     { 
      this.probeField = value; 
     } 
    } 

    private static System.Xml.Serialization.XmlSerializer Serializer 
    { 
     get 
     { 
      if ((serializer == null)) 
      { 
       serializer = new System.Xml.Serialization.XmlSerializer(typeof(EnvelopeBody)); 
      } 
      return serializer; 
     } 
    } 
} 

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] 
[System.SerializableAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.xmlsoap.org/ws/2005/04/discovery")] 
public partial class Probe 
{ 

    private string scopesField; 

    private string typesField; 

    private static System.Xml.Serialization.XmlSerializer serializer; 

    [System.Xml.Serialization.XmlElementAttribute(Order = 0)] 
    public string Scopes 
    { 
     get 
     { 
      return this.scopesField; 
     } 
     set 
     { 
      this.scopesField = value; 
     } 
    } 

    [System.Xml.Serialization.XmlElementAttribute(Order = 1)] 
    public string Types 
    { 
     get 
     { 
      return this.typesField; 
     } 
     set 
     { 
      this.typesField = value; 
     } 
    } 

    private static System.Xml.Serialization.XmlSerializer Serializer 
    { 
     get 
     { 
      if ((serializer == null)) 
      { 
       serializer = new System.Xml.Serialization.XmlSerializer(typeof(Probe)); 
      } 
      return serializer; 
     } 
    } 
} 

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] 
[System.SerializableAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.w3.org/2003/05/soap-envelope")] 
public partial class EnvelopeHeader 
{ 

    private string messageIDField; 

    private To toField; 

    private Action actionField; 

    private static System.Xml.Serialization.XmlSerializer serializer; 

    public EnvelopeHeader() 
    { 
     this.actionField = new Action(); 
     this.toField = new To(); 
    } 

    [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.xmlsoap.org/ws/2004/08/addressing", Order = 0)] 
    public string MessageID 
    { 
     get 
     { 
      return this.messageIDField; 
     } 
     set 
     { 
      this.messageIDField = value; 
     } 
    } 

    [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.xmlsoap.org/ws/2004/08/addressing", IsNullable = true, Order = 1)] 
    public To To 
    { 
     get 
     { 
      return this.toField; 
     } 
     set 
     { 
      this.toField = value; 
     } 
    } 

    [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://schemas.xmlsoap.org/ws/2004/08/addressing", IsNullable = true, Order = 2)] 
    public Action Action 
    { 
     get 
     { 
      return this.actionField; 
     } 
     set 
     { 
      this.actionField = value; 
     } 
    } 

    private static System.Xml.Serialization.XmlSerializer Serializer 
    { 
     get 
     { 
      if ((serializer == null)) 
      { 
       serializer = new System.Xml.Serialization.XmlSerializer(typeof(EnvelopeHeader)); 
      } 
      return serializer; 
     } 
    } 
} 

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] 
[System.SerializableAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.xmlsoap.org/ws/2004/08/addressing")] 
public partial class To 
{ 

    private string mustUnderstandField; 

    private string valueField; 

    private static System.Xml.Serialization.XmlSerializer serializer; 

    [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://www.w3.org/2003/05/soap-envelope")] 
    public string mustUnderstand 
    { 
     get 
     { 
      return this.mustUnderstandField; 
     } 
     set 
     { 
      this.mustUnderstandField = value; 
     } 
    } 

    [System.Xml.Serialization.XmlTextAttribute()] 
    public string Value 
    { 
     get 
     { 
      return this.valueField; 
     } 
     set 
     { 
      this.valueField = value; 
     } 
    } 

    private static System.Xml.Serialization.XmlSerializer Serializer 
    { 
     get 
     { 
      if ((serializer == null)) 
      { 
       serializer = new System.Xml.Serialization.XmlSerializer(typeof(To)); 
      } 
      return serializer; 
     } 
    } 
} 

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] 
[System.SerializableAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://schemas.xmlsoap.org/ws/2004/08/addressing")] 
public partial class Action 
{ 

    private string mustUnderstandField; 

    private string valueField; 

    private static System.Xml.Serialization.XmlSerializer serializer; 

    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string mustUnderstand 
    { 
     get 
     { 
      return this.mustUnderstandField; 
     } 
     set 
     { 
      this.mustUnderstandField = value; 
     } 
    } 

    [System.Xml.Serialization.XmlTextAttribute()] 
    public string Value 
    { 
     get 
     { 
      return this.valueField; 
     } 
     set 
     { 
      this.valueField = value; 
     } 
    } 

    private static System.Xml.Serialization.XmlSerializer Serializer 
    { 
     get 
     { 
      if ((serializer == null)) 
      { 
       serializer = new System.Xml.Serialization.XmlSerializer(typeof(Action)); 
      } 
      return serializer; 
     } 
    } 
} 
} 

反序列化我没有问题,它创建了适当的类,但我不知道,如何acc属性。 我是想这样的事情:

PROBE.Envelope env = PROBE.Envelope.Deserialize(xmlString); 
env.Items[0].MessageID = "xxxxxxxxxxx"; 

,但它是错误的。

错误33'对象'没有包含'MessageID'的定义,也没有找到接受类型'object'的第一个参数的扩展方法'MessageID'(你是否缺少using指令或程序集引用?)

我包括link以便更好地理解类结构。 我将不胜感激任何意见,谢谢。

回答

1

由于某种原因,您的Items属性属于对象类型,但它应该是EnvelopeHeader。如果您已正确定义所有类型,请检查您的xsd文件。

或者你可以施放:

((EnvelopeHeader)env.Items[0]).MessageID = "xxxxxxxxxxx"; 
+0

是的,我觉得这很好,因为项目[0]是EnvelopeHeader类型和项目[1]是EnvelopeBody型... – Hyen 2012-03-12 23:40:23

+0

Aaa级是的,谢谢! – Hyen 2012-03-13 11:10:30