首页 > 解决方案 > 如何对我的结构接收到的 xml 响应进行类型转换(迭代)

问题描述

我基本上对c#很陌生。我正在做一个项目,我需要以 xml 格式向代理服务器发送请求并以 xml 格式接收响应。Broker 提供了一个 .cs 文件,其中定义了一些类。我需要迭代对这个类的响应。我能够迭代对我的类的第一级 xml 响应,但我无法迭代第二级响应。请指导我如何迭代到 LocateStatus 类。

经纪人响应样本

<LocateResponse xmlns="http://www.omni.com/StockLoan/LocateService"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.omni.com/StockLoan/LocateService LocateService-1.0.xsd ">
 <Locates>
 <Locate>
 <LocateRequest acceptManualApproval="false" acceptPartial="false" requestorReference="1" market="US"
requestedQuantity="1000" securityId="AAPL UW" securityIdentifierType="BBG_TICKER" />
 <LocateStatusApproved locateId="10010" approvedQuantity="1000" rateDescription="GC" rate="0.35"
rateIndicator="FEE" approvedTimeUTC="2015-01-31T12:00:00.000Z" xsi:type="LocateStatusApproved"/>
 </Locate>
 </Locates>
</LocateResponse>

我正在将它迭代到我的结构中,就像这样。

LocateResponse locateresponse = OpmXMLUtil.convertXMLToRequestResponse<LocateResponse(responseFromServer);

locatresponse 具有第一级(定位请求)元素详细信息。但我不知道进入二级元素(即 LocateStatusApproved)。

下面是预定义并由经纪人提供的类。

public partial class LocateResponse {
    
    private Locate[] locatesField;        
    private string disclaimerField;
    
    /// <remarks/>
    [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)]
    public Locate[] Locates {
        get {
            return this.locatesField;
        }
        set {
            this.locatesField = value;
        }
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(DataType="token", IsNullable=true)]
    public string Disclaimer {
        get {
            return this.disclaimerField;
        }
        set {
            this.disclaimerField = value;
        }
    }
}

public partial class Locate {
    
    private LocateRequest locateRequestField;        
    private LocateStatus itemField;

    /// <remarks/>
    public LocateRequest LocateRequest {
        get {
            return this.locateRequestField;
        }
        set {
            this.locateRequestField = value;
        }
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("LocateStatusApproved", typeof(LocateStatusApproved))]
    [System.Xml.Serialization.XmlElementAttribute("LocateStatusPartiallyApproved", typeof(LocateStatusPartiallyApproved))]
    [System.Xml.Serialization.XmlElementAttribute("LocateStatusPending", typeof(LocateStatusPending))]
    [System.Xml.Serialization.XmlElementAttribute("LocateStatusRejected", typeof(LocateStatusRejected))]
    public LocateStatus Item {
        get {
            return this.itemField;
        }
        set {
            this.itemField = value;
        }
    }
}

public abstract partial class LocateStatus {
    
    private statusCodeType statusCodeField;        
    private bool statusCodeFieldSpecified;        
    private string commentField;
    
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public statusCodeType statusCode {
        get {
            return this.statusCodeField;
        }
        set {
            this.statusCodeField = value;
        }
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool statusCodeSpecified {
        get {
            return this.statusCodeFieldSpecified;
        }
        set {
            this.statusCodeFieldSpecified = value;
        }
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute(DataType="token")]
    public string comment {
        get {
            return this.commentField;
        }
        set {
            this.commentField = value;
        }
    }
}

public partial class LocateStatusApproved : LocateStatus {
    
    private System.DateTime approvedTimeUTCField;        
    private bool approvedTimeUTCFieldSpecified;        
    private string locateIdField;        
    private string approvedQuantityField;        
    private decimal rateField;        
    private bool rateFieldSpecified;        
    private rateIndicatorType rateIndicatorField;        
    private bool rateIndicatorFieldSpecified;        
    private rateDescriptionType rateDescriptionField;        
    private bool rateDescriptionFieldSpecified;
    
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public System.DateTime approvedTimeUTC {
        get {
            return this.approvedTimeUTCField;
        }
        set {
            this.approvedTimeUTCField = value;
        }
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool approvedTimeUTCSpecified {
        get {
            return this.approvedTimeUTCFieldSpecified;
        }
        set {
            this.approvedTimeUTCFieldSpecified = value;
        }
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute(DataType="token")]
    public string locateId {
        get {
            return this.locateIdField;
        }
        set {
            this.locateIdField = value;
        }
    }
    
    /// <remarks/>        [System.Xml.Serialization.XmlAttributeAttribute(DataType="positiveInteger")]
    public string approvedQuantity {
        get {
            return this.approvedQuantityField;
        }
        set {
            this.approvedQuantityField = value;
        }
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public decimal rate {
        get {
            return this.rateField;
        }
        set {
            this.rateField = value;
        }
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool rateSpecified {
        get {
            return this.rateFieldSpecified;
        }
        set {
            this.rateFieldSpecified = value;
        }
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public rateIndicatorType rateIndicator {
        get {
            return this.rateIndicatorField;
        }
        set {
            this.rateIndicatorField = value;
        }
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool rateIndicatorSpecified {
        get {
            return this.rateIndicatorFieldSpecified;
        }
        set {
            this.rateIndicatorFieldSpecified = value;
        }
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public rateDescriptionType rateDescription {
        get {
            return this.rateDescriptionField;
        }
        set {
            this.rateDescriptionField = value;
        }
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool rateDescriptionSpecified {
        get {
            return this.rateDescriptionFieldSpecified;
        }
        set {
            this.rateDescriptionFieldSpecified = value;
        }
    }
}

public partial class LocateStatusPartiallyApproved : LocateStatusApproved {
}

标签: c#xml

解决方案


尝试以下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.IO;

namespace ConsoleApplication176
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            string xml = File.ReadAllText(FILENAME);
            StringReader sReader = new StringReader(xml);
            XmlReader xReader = XmlReader.Create(sReader);
            XmlSerializer serializer = new XmlSerializer(typeof(LocateResponse));
            LocateResponse locateResponse = (LocateResponse)serializer.Deserialize(xReader);

        }
    }
    [XmlRoot(ElementName = "LocateResponse", Namespace = "http://www.omni.com/StockLoan/LocateService")]
    public partial class LocateResponse
    {
        [XmlArray("Locates")]
        [XmlArrayItem("Locate")]
        public Locate[] locatesField;
    }

    public partial class Locate
    {
        public LocateRequest LocateRequest { get; set; }
        public LocateStatusApproved LocateStatusApproved { get; set; }

     }
    public class LocateStatusApproved
    {
        [XmlAttribute()]
        public int locateId { get; set; }
        [XmlAttribute()]
        public int approvedQuantity { get; set; }
        [XmlAttribute()]
        public string rateDescription { get; set; }
        [XmlAttribute()]
        public decimal rate { get; set; }
        [XmlAttribute()]
        public string rateIndicator { get; set; }
        [XmlAttribute()]
        public DateTime approvedTimeUTC { get; set; }
        [XmlAttribute(AttributeName = "type", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
        public string type { get; set; }


    }
    public class LocateRequest
    {
        [XmlAttribute()]
        public Boolean acceptManualApproval { get;set;}
        [XmlAttribute()]
        public Boolean acceptPartial { get; set; }
        [XmlAttribute()]
        public int requestorReference { get; set; }
        [XmlAttribute()]
        public string market { get; set; }
        [XmlAttribute()]
        public int requestedQuantity { get; set; }
        [XmlAttribute()]
        public string securityId { get; set; }
        [XmlAttribute()]
        public string securityIdentifierType { get; set; } 

    }
}

推荐阅读