可以将类的实例发送到网络服务器上的网络方法,不是吗? (该类实际上是在网络服务器上创建的)。
我问是因为我有一个已填充的类实例,我正试图将其发送回网络服务器,但是当该实例到达网络方法时,它已被清空(已创建一个新实例)??
一些可能有助于解释的代码:
private void miIssue_Click(object sender, EventArgs e)
{
string r = sC.updatePickItem(batch, deptID, issued, pL);
}
//The creation of the webserver class I want to pass
[Serializable]
public class PickingList
{
List<PickingDetails> pD = new List<PickingDetails>();
public bool found { get; set; }
public PickingDetails[] pickingDetail
{
get { return pD.ToArray(); }
set { }
}
public void addPickingDetail(PickingDetails pI)
{
pD.Add(pI);
}
}
[Serializable]
public class PickingDetails
{
public string warehouse { get; set; }
public string stockCode { get; set; }
}
//The webmethod I'm connecting to
[WebMethod]
public string updatePickItem(string batch, string deptID, bool issued, PickingList pL )
{
try
{
if (!issued)
issued = issueStockToWIP(rows, batch, deptID, pL);
}
catch (Exception e)
{ return e.ToString(); }
}
请您参考如下方法:
如果您使用的是 [WebMethod],那么通常在幕后使用 XmlSerializer。看起来最大的问题是您在 pickingDetail 上的空 set。由于 XmlSerializer 需要列表/数组上的 set,我可能会保持简单并使用:
[XmlElement("pickingDetail")
public List<PickingDetails> Details {get;set;}
(并可能在无参数 ctor 中初始化它以简化使用)
public PickingList() {
Details = new List<PickingDetails>();
}
关于信息,我倾向于在 C# 中使用 .NET 命名约定,在 xml 中使用 xml 约定——例如:
[XmlElement("found")] // or XmlAttribute
public bool Found { get; set; }
有关信息,DataContractSerializer(默认情况下在 WCF 服务中使用)没有这种恼人的 setter 需求。您也可以切换到 WCF...
