C# 返回泛型列表的WebMethod

C# 返回泛型列表的WebMethod,c#,asp.net,web-services,soap,C#,Asp.net,Web Services,Soap,我有两个简单的类: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 str

我有两个简单的类: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;
}
公共类秩序
{  
公共字符串OrderNo{get;set;}
公共字符串CustomerName{get;set;}
公共列表行{get;set;}
}  
公共类命令行
{
公共字符串ItemNo{get;set;}
公共整数数量{get;set;}
公共十进制价格{get;set;}
}
[网络方法]
公共订单GetOrder(字符串orderNo)
{
返回null;
}
[网络方法]
公共列表GetOrderList(字符串orderNo)
{
返回null;
}
问题在于,订单中OrderLine对象的详细信息(属性)不是由第二个WebMethod呈现的(它与第一个WebMethod配合得很好):

第一个WebMethod(返回订单)呈现此XML(每个订单行的ItemNo、Qty和Price均正确):


一串
一串
一串
int
十进制的
一串
int
十进制的
第二个WebMethod(返回列表)呈现此XML(请注意,医嘱行不再呈现细节):


一串
一串
一串
一串
我如何才能让订单行以详细信息而不是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());
    }
}
公共类秩序
{
公共字符串OrderNo{get;set;}
公共字符串CustomerName{get;set;}
公共列表行{get;set;}
公共秩序()
{
行=新列表();
添加(新订单行());
添加(新订单行());
}
}
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>

一串
一串
一串
一串

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

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

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>();
    }
} 
公共类秩序
{  
公共字符串OrderNo{get;set;}
公共字符串CustomerName{get;set;}
公共列表行{get;set;}
公共秩序()
{
this.Lines=新列表();
}
} 

您遇到的问题是列表不可XMLSerializable(请参阅)。您需要将其转换为数组之类的内容

您可以只使用数组,也可以继续使用列表,但在返回值时使用.ToArray()方法

查看是否确实要序列化它而不使用数组

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