在项目中,外部程序需要调用项目数据,所以便通过WebService公布了几个外部调用方法。
/// <summary> /// 提示类 /// </summary> [Serializable] public class publicAlert { /// <summary> /// 是否成功 /// </summary> public bool isOk { get; set; } /// <summary> /// 返回内容 /// </summary> public string message { get; set; } /// <summary> /// 操作返回结构类 /// </summary> public object tag { get; set; } /// <summary> /// 构造方法 /// </summary> /// <param name="boolres">是否成功</param> /// <param name="resmess">信息</param> public publicAlert(bool boolres, string resmess) { isOk = boolres; message = resmess; } public publicAlert() { } }
此对象,我进行了序列化[Serializable]标记,但是在属性tag为object类型,以便接收任何对象。
在程序中如果tag赋值int,string等非自定义类型,程序运行正常,
当赋值自定义对象时,程序报错:
生成 XML 文档时出错。 ---> System.InvalidOperationException: 不应是类型 ws_obj+MyObj。使用 XmlInclude 或 SoapInclude 属性静态指定非已知的类型。
这时便需要在方法前事先定义序列化识别类型
[System.Xml.Serialization.XmlInclude(typeof("自定义类型"))]
例如:
[System.Xml.Serialization.XmlInclude(typeof(AppProvider))] public publicAlert ProviderLogin(string LoginName, string LogginPwd) { publicAlert pub = new publicAlert(); pub.isOk = true; pub.message = "登录成功!"; AppProvider apro=new AppProvider(); pub.tag = apro; return pub; }
如此,程序方可运行正常!