【发布时间】:2014-02-15 22:26:01
【问题描述】:
我需要向网络服务发送请求。这个请求要求一个“会话”对象作为参数。
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18060")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://www.xmlns.cfins.com/cfins/services/publishPolicyData/1.0")]
public partial class session {
private object[] itemsField;
private string idField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("data", typeof(sessionData))]
[System.Xml.Serialization.XmlElementAttribute("properties", typeof(sessionProperties))]
public object[] Items {
get {
return this.itemsField;
}
set {
this.itemsField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string id {
get {
return this.idField;
}
set {
this.idField = value;
}
}
}
这是我的 xml 文件。
<session id="6055">
<properties dateModified="2014-01-08" engineVersion="2.0" cultureCode="en-US" cultureName="United States [english]">
<userName>admin</userName>
</properties>
<data id="d2311A049FDC64CD9AE9EF3DE5874CB2D">
.....
</data>
</session>
当我反序列化这个 xml 文件时,我只得到 id,items 总是空的。顺便说一句,会话类来自网络服务,我无法更改它。
public static session GetSession()
{
var s = new session();
var data = new sessionData();
var sessionXml = @"C:\Projects\CFWinSvc - Copy\XmlDeSerialize\session.xml";
using (TextReader reader = new System.IO.StreamReader(sessionXml))
{
var serializer = new XmlSerializer(typeof(session));
s = (session)serializer.Deserialize(reader);
}
return s;
}
public static session GetSession()
{
var s = new session();
var data = new sessionData();
var sessionXml = @"C:\Projects\CFWinSvc - Copy\XmlDeSerialize\session.xml";
using (TextReader reader = new System.IO.StreamReader(sessionXml))
{
var serializer = new XmlSerializer(typeof(session));
s = (session)serializer.Deserialize(reader);
}
return s;
}
更新:
这是 XML 架构。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns="http://www.cfins.com" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.xmlns.cfins.com/cfins/services/publishPolicyData/1.0" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="session">
<xs:complexType>
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element name="properties">
<xs:complexType>
<xs:sequence>
<xs:element name="userName" type="xs:string"/>
</xs:sequence>
<xs:attribute name="dateModified" use="optional"/>
<xs:attribute name="engineVersion" type="xs:string" use="optional"/>
<xs:attribute name="cultureCode" type="xs:string" use="optional"/>
<xs:attribute name="cultureName" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="data">
<xs:complexType>
<xs:all>
<xs:element name="AlwaysAddIDs" type="xs:boolean" minOccurs="0"/>
<xs:element name="ProRatingOn" type="xs:boolean" minOccurs="0"/>
<xs:element name="carrier" minOccurs="0">
<xs:complexType>
<xs:attribute name="id" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="userinterface" minOccurs="0">
<xs:complexType>
<xs:attribute name="id" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
</xs:all>
<xs:attribute name="id" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:sequence>
<xs:attribute name="id" use="optional"/>
</xs:complexType>
</xs:element>
</xs:schema>
【问题讨论】:
标签: c# xml web-services deserialization xml-deserialization