WebMethod возвращает общий список - PullRequest
2 голосов
/ 04 ноября 2010

У меня есть два простых класса: объект Order, который содержит список объектов OrderLine:

public class Order  
{  
    public string OrderNo { get; set; }  
    public string CustomerName { get; set; }  

    public List<OrderLine> Lines { get; set; }  
}  

public class OrderLine
{
    public string ItemNo { get; set; }
    public int Qty { get; set; }
    public decimal Price { get; set; }
}

[WebMethod]
public Order GetOrder(string orderNo)
{
    return null;
}

[WebMethod]
public List<Order> GetOrderList(string orderNo)
{
    return null;
}

Проблема заключается в том, что детали (свойства) объектов OrderLine в Orders не отображаютсявторой WebMethod (он отлично работает с первым WebMethod):

Первый WebMethod (возвращающий ордер) отображает этот XML (правильно, с ItemNo, Qty & Price для каждой OrderLine):

<GetOrderResult>  
  <OrderNo>string</OrderNo>  
  <CustomerName>string</CustomerName>  
  <Lines>  
    <OrderLine>  
      <ItemNo>string</ItemNo>  
      <Qty>int</Qty>  
      <Price>decimal</Price>  
    </OrderLine>  
    <OrderLine>  
      <ItemNo>string</ItemNo>  
      <Qty>int</Qty>  
      <Price>decimal</Price>  
    </OrderLine>  
  </Lines>  
</GetOrderResult>

Второй WebMethod (возвращающий список) отображает этот XML-код (обратите внимание, что строки заказа больше не отображаются с подробностями):

<GetOrderListResult>  
  <Order>  
    <OrderNo>string</OrderNo>  
    <CustomerName>string</CustomerName>  
    <Lines>  
      <OrderLine xsi:nil="true" />  
      <OrderLine xsi:nil="true" />  
    </Lines>  
  </Order>  
  <Order>  
    <OrderNo>string</OrderNo>  
    <CustomerName>string</CustomerName>  
    <Lines>  
      <OrderLine xsi:nil="true" />  
      <OrderLine xsi:nil="true" />  
    </Lines>  
  </Order>  
</GetOrderListResult>  

Как получить строки заказа для отображения с деталями вместоas xsi: nil = "true" ??

Спасибо.


Спасибо за ответ, но это не помогает.Код, который я разместил, максимально упрощен;настоящий код, конечно, создает экземпляр списка и т. д., но все еще имеет ту же проблему.Но я все же попробовал ваше предложение в примере:

public class Order
{
    public string OrderNo { get; set; }
    public string CustomerName { get; set; }

    public List<OrderLine> Lines { get; set; }

    public Order()
    {
        Lines = new List<OrderLine>();
        Lines.Add(new OrderLine());
        Lines.Add(new OrderLine());
    }
}

WebMethod по-прежнему возвращает:

<GetOrderListResult>
    <Order>
      <OrderNo>string</OrderNo>
      <CustomerName>string</CustomerName>
      <Lines>
        <OrderLine xsi:nil="true" />
        <OrderLine xsi:nil="true" />
      </Lines>
    </Order>
    <Order>
      <OrderNo>string</OrderNo>
      <CustomerName>string</CustomerName>
      <Lines>
        <OrderLine xsi:nil="true" />
        <OrderLine xsi:nil="true" />
      </Lines>
    </Order>
</GetOrderListResult>

Ответы [ 2 ]

2 голосов
/ 23 октября 2011

Проблема, с которой вы сталкиваетесь, заключается в том, что List не поддерживает XMLSerializable (см. здесь ).Вам нужно будет преобразовать его во что-то, например массив.

Вы можете либо использовать массив, либо продолжать использовать список, но затем использовать метод .ToArray () при возвратезначение.

См. this , если вы действительно хотите сериализовать его и не использовать массив.

0 голосов
/ 04 ноября 2010

вам нужно сделать экземпляр общего списка.

Вы можете сделать это в конструкторе

public class Order  
{  
    public string OrderNo { get; set; }  
    public string CustomerName { get; set; }  

    public List<OrderLine> Lines { get; set; }  

    public Order()
    {
         this.Lines = new List<OrderLine>();
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...