#c# #xml
#c# #xml
Вопрос:
Я в принципе очень новичок в c #. Я делаю один проект, в котором мне нужно отправить запрос на сервер брокера в формате xml и получить ответ в формате xml. Брокер предоставил один файл .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 содержит сведения об элементах первого уровня (запрос местоположения). но я не знаю, как перейти к элементу второго уровня (который одобрен locatestatus).
Ниже приведен класс, который предопределен и задан брокером.
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 {
}
Комментарии:
1. Если у вас есть
Locate
экземпляр, вы должны иметь возможность получитьItem
свойство (странное имя, на самом деле для статуса), которое имеет типLocateStatus
, а затем привести его кLocateStatusApproved
.
Ответ №1:
Попробуйте выполнить следующее :
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:temptest.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; }
}
}