我发现了我生成的类的访问属性。
这是我的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-f01234567890</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;
}
}
}
}
我对反序列化没有任何问题,它创建了正确的类,但我不知道,如何访问属性。 我正在尝试这样的事情:
PROBE.Envelope env = PROBE.Envelope.Deserialize(xmlString);
env.Items[0].MessageID = "xxxxxxxxxxx";
但这是错误的。
(错误33'对象'不包含'MessageID'的定义,也没有扩展方法'MessageID'接受'object'类型的第一个参数(你是否缺少using指令或程序集)引用?)的)
我将link包含在画面中,以便更好地理解类结构。 我将不胜感激任何建议,谢谢。
答案 0 :(得分:2)
由于某种原因,您的Items
属性属于object类型,但它应该是EnvelopeHeader
。如果已正确定义所有类型,请检查xsd文件。
或者你可以施放:
((EnvelopeHeader)env.Items[0]).MessageID = "xxxxxxxxxxx";