C# 返回泛型列表的WebMethod
我有两个简单的类:Order对象,它包含OrderLine对象的列表: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
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>();
}
}