我有两个简单的类:一个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对象的详细信息(属性)不会由第二个WebMethod呈现(它可以与第一个WebMethod一起使用):
第一个WebMethod(返回订单),呈现此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>
如何使用详细信息而不是xsi来呈现OrderLines: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>
答案 0 :(得分:2)
您遇到的问题是List不是XMLSerializable(请参阅here)。您需要将其转换为诸如数组之类的东西。
您可以只使用数组,也可以继续使用List,但在返回值时使用.ToArray()方法。
如果你真的想序列化它而不使用数组,请参见this。
答案 1 :(得分:-1)
您需要制作通用List的实例。
您可以在构造函数
中执行此操作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>();
}
}