В C # API я получаю xml-ответ, который мне нужно преобразовать в JSON, чтобы вернуть его моему клиентскому клиентскому приложению.Я не могу понять, как преобразовать вложенный потомок во вложенный класс.
У меня есть два класса C #, усеченных ниже.
public class DetailsKey
{
public string Status {get; set;}
public string ErrorMessage {get; set;}
public string AmountApproved {get; set;}
public PaymentDetails PaymentDetails {get; set;}
}
public class PaymentDetails
{
public string Id {get;set;}
public string PaymentType {get;set;}
public string Customer {get;set;}
}
После получения ответа я анализирую его следующим образом:
XDocument xd = XDocument.Parse(result);
var detResponse = xd.Descendants().Where(x => x.Name.LocalName == "DetailsKey").Select(x => new DetailsKey()
{
Status = (string)x.Element(x.Name.Namespace + "Status"),
ErrorMessage = (string)x.Element(x.Name.Namespace + "ErrorMessage"),
AmountApproved = (string)x.Element(x.Name.Namespace + "AmountApproved"),
PaymentDetails = x.Descendants("PaymentDetails").Select(p => new PaymentDetails()
{
PaymentDetail = x.Descendants("PaymentDetail").Select(pd => new PaymentDetail(){
Id = (string)pd.Element(pd.Name.Namespace + "Id"),
ErrorMessage = (string)pd.Element(pd.Name.Namespace + "ErrorMessage"),
PaymentType = (string)pd.Element(pd.Name.Namespace + "PaymentType"),
Customer = (string)pd.Element(pd.Name.Namespace + "Customer")
}).FirstOrDefault(),
}).FirstOrDefault(),
}).FirstOrDefault();
Если я закомментирую «PaymentDetails = ...», ошибок нет.Но когда я пытаюсь проанализировать потомок PaymentDetails, я получаю ошибки.Как правильно проанализировать потомка и поместить его во вложенный класс.
Вот пример XML:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<DetailsKey>
<Status>APPROVED</Status>
<AmountApproved>7.65</AmountApproved>
<ErrorMessage/>
<PaymentDetails>
<PaymentDetail>
<Id>12345</Id>
<ErrorMessage/>
<PaymentType>SALE</PaymentType>
<Customer>John Smith</Customer>
</PaymentDetail>
</PaymentDetails>
</DetailsKey>
</soap:Body>
</soap:Envelope>