我正在使用ASP.NET C#创建Web服务。我从webservice发送各种数据类型,所以我使用以下结构。
public enum WS_ServiceResponseResult
{
Success,
Failure,
}
public class WS_ServiceResponse
{
public WS_ServiceResponseResult result { get; set; }
public object data { get; set; }
}
public class WS_User
{
public long id{ get; set; }
public string name{ get; set; }
}
Webservice示例方法
[WebMethod(EnableSession = true)]
public WS_ServiceResponse LogIn(string username, string pasword)
{
WS_ServiceResponse osr = new WS_ServiceResponse();
long userID = UserController.checkLogin(username, pasword);
if (userID != 0)
{
osr.result = WS_ServiceResponseResult.Success;
osr.data = new WS_User() { id = userID, name = username };
}
else
{
osr.result = WS_ServiceResponseResult.Failure;
osr.data = "Invalid username/password!";
}
return osr;
}
我使用两种客户端类型,javascript和C#.NET Windows Form。当我从javascript调用时,我没有遇到任何问题,osr.data充满了WS_User。所以我可以轻松地使用osr.data.id。但是当我使用C#.NET(代理是使用“添加Web引用”生成)时,我可以成功调用但是当结果到达时我得到了Soap异常
{服务器无法处理 服务器无法处理 服务器无法处理请求。 ---> System.InvalidOperationException:生成XML时出错 文献。 ......
我错过了什么?我猜对象没有明确定义并导致问题。有哪些解决方法?
由于
Maksud
增加:
如果添加以下虚拟方法,那么它可以很好地工作。希望得到解决方案有所帮助。
[WebMethod]
public WS_User Dummy()
{
return new WS_User();
}
答案 0 :(得分:4)
我有类似的问题返回“对象”(可能有多个类) 以下是示例代码:
[Serializable()]
[XmlRoot(ElementName="Object")]
public sealed class XMLObject
{
private Object _Object;
[XmlElement(Type=typeof(App.Projekte.Projekt), ElementName="Projekt")]
[XmlElement(Type=typeof(App.Projekte.Task), ElementName="Task")]
[XmlElement(Type=typeof(App.Projekte.Mitarbeiter), ElementName="Mitarbeiter")]
public Object Object
{
get
{
return _Object;
}
set
{
_Object = value;
}
}
}
我认为您应该以这种方式更改代码:
[XmlRoot(ElementName="ServiceResponse")]
public class WS_ServiceResponse
{
public WS_ServiceResponseResult result { get; set; }
[XmlElement(Type=typeof(WS_User), ElementName="WS_User")]
[XmlElement(Type=typeof(string), ElementName="Text")]
public object data { get; set; }
}