2012-03-12 2 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 to 속성에.

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

을하지만 그것은 잘못된 것입니다 : 나는 그런 식으로 뭔가를 시도하고 있었다.

(오류 33 'object'에 'MessageID'에 대한 정의가없고 'objectID'유형의 첫 번째 인수를 허용하는 'MessageID'가 없습니다. 사용 지시문이나 어셈블리 참조가 누락 되었습니까? ?)

클래스 구조를 더 잘 이해하기 위해 그림에 link을 포함 시켰습니다. 감사의 말을 전하는 데 감사드립니다.

답변

1

Items 속성은 개체 유형이지만, EnvelopeHeader이어야합니다. 모든 유형을 올바르게 정의한 경우 xsd 파일을 확인하십시오.

또는 당신은 캐스트 할 수 있습니다 :

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

예, 나는 그것이 좋은 생각, 항목 [0] EnvelopeHeader 종류와 항목이기 때문에 [1] EnvelopeBody 유형입니다 ... – Hyen

+0

아아 네, 감사합니다! – Hyen