2010-11-04 2 views
2

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

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 в Орденов не оказываемая второй WebMethod (он отлично работает с первым WebMethod):

первый WebMethod (возвращающая Order), делает этот XML (правильно, с ITEMNO, Кол-во & Цена для каждого 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 (возвращающая List), делает этот XML (обратите внимание, что OrderLines больше не отображается с деталями):

<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> 

Как я могу получить OrderLines сделать с деталями, а не как XSI: ноль = «истина» ??

Спасибо.


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

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> 

ответ

-1

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

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

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>(); 
    } 
} 
2

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

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

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

Смежные вопросы