【问题标题】:WebMethod returning generic listWebMethod 返回通用列表
【发布时间】:2010-11-04 03:48:12
【问题描述】:

我有两个简单的类:一个 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;
}

问题是 Orders 中 OrderLine 对象的详细信息(属性)不是由第二个 WebMethod 呈现的(它与第一个 WebMethod 一起工作正常):

第一个 WebMethod(返回一个 Order),呈现这个 XML(正确地,每个 OrderLine 带有 ItemNo、Qty 和 Price):

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

【问题讨论】:

    标签: c# asp.net web-services soap


    【解决方案1】:

    您遇到的问题是 List 不是 XMLSerializable(请参阅here)。您需要将其转换为诸如数组之类的东西。

    您可以只使用一个数组,也可以继续使用 List,然后在返回值时使用 .ToArray() 方法。

    如果你真的想序列化它而不使用数组,请参阅this

    【讨论】:

      【解决方案2】:

      您需要创建一个通用列表的实例。

      您可以在构造函数中执行此操作

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

      【讨论】:

        猜你喜欢
        • 2019-03-16
        • 1970-01-01
        • 1970-01-01
        • 2012-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多