В envelope оказывается список без транзакций. Как поменять декларацию транзакции или использование XmlSerializer чтобы вот такой xml превращался в список? XML не менять — такой приходит извне.
var newXml =@"
<reestr>
<paymentTransaction xmlns='http://privilege.sbibank.ru/'>
<tranId>ABCDEF</tranId>
<tranSum>262</tranSum>
<tranDate>2016-12-03T11:43:40.907+03:00</tranDate>
</paymentTransaction>
<paymentTransaction xmlns='http://privilege.sbibank.ru/'>
<tranId>ZXCV</tranId>
<tranSum>234.1</tranSum>
<tranDate>2016-12-13T11:43:40.907+03:00</tranDate>
</paymentTransaction>
<paymentTransaction xmlns='http://privilege.sbibank.ru/'>
<tranId>BNMF</tranId>
<tranSum>7262</tranSum>
<tranDate>2016-12-23T11:43:40.907+03:00</tranDate>
</paymentTransaction>
</reestr>
";
[XmlType("paymentTransaction")]
public class PmtTransaction {
[XmlElement("tranId")]
public long TranId { get; set; }
}
XmlSerializer ser2 = new XmlSerializer(typeof(List<PmtTransaction>)
, new XmlRootAttribute("reestr")
);
List<PmtTransaction> envelope;
using (StringReader reader = new StringReader(newXml))
{
envelope = (List<PmtTransaction>)ser2.Deserialize(reader);
return envelope;
}
Re: Почему десериализация такого XML не работает ?
Здравствуйте, Glestwid, Вы писали:
G>В envelope оказывается список без транзакций. Как поменять декларацию транзакции или использование XmlSerializer чтобы вот такой xml превращался в список? XML не менять — такой приходит извне.
Я бы сделал так:
[XmlRoot("reestr")]
public class Reestr
{
[XmlElement("paymentTransaction", Namespace = "http://privilege.sbibank.ru/")]
public List<PmtTransaction> Transactions { get; set; }
}
public class PmtTransaction
{
[XmlElement("tranId")]
public string TranId { get; set; }
}
И потом просто вызывал бы так:
XmlSerializer ser2 = new XmlSerializer(typeof(Reestr));
using (StringReader reader = new StringReader(newXml))
{
var envelope = (Reestr) ser2.Deserialize(reader);
return envelope.Transactions;
}
Re[2]: Почему десериализация такого XML не работает ?
G>>В envelope оказывается список без транзакций. Как поменять декларацию транзакции или использование XmlSerializer чтобы вот такой xml превращался в список? XML не менять — такой приходит извне.
МР>Я бы сделал так: МР>
МР>[XmlRoot("reestr")]
МР>public class Reestr
МР>{
МР> [XmlElement("paymentTransaction", Namespace = "http://privilege.sbibank.ru/")]
МР> public List<PmtTransaction> Transactions { get; set; }
МР>}
МР>public class PmtTransaction
МР>{
МР> [XmlElement("tranId")]
МР> public string TranId { get; set; }
МР>}
МР>
МР>И потом просто вызывал бы так: МР>
МР>XmlSerializer ser2 = new XmlSerializer(typeof(Reestr));
МР>using (StringReader reader = new StringReader(newXml))
МР>{
МР> var envelope = (Reestr) ser2.Deserialize(reader);
МР> return envelope.Transactions;
МР>}
МР>
Супер! То, что надо. Никогда не знал, что список можно описать еще и так в XML