我正在使用asmx webservices并通过它们序列化/反序列化大量数据,用于我正在处理的JSON管理面板。
当加载信息时,我调用一个将User []数组加载到javascript中的web服务。但是,我有大约25个User的子类,它们有自己独特的属性,实际上是通过这个webservice调用加载的。以这种方式加载它们似乎工作正常,但保存有一些问题。
save方法使用User []数组进行保存。在大多数子类中,javascript中没有__type提示,反序列化失败。它似乎在具有__type属性的类上工作正常。
所以我的问题是这个。如何强制__type包含在被序列化的javascript对象中?
这是我的C#调用加载对象(简化了一下)以防万一你需要它:
[WebMethod(EnableSession = true)]
public User[] GetUsersInGroup(int UserGroupID)
{
List<User> UsersInGroup = User.GetUsersInGroup(UserGroupID);
return UsersInGroup.ToArray();
}
这是保存方法:
[WebMethod(EnableSession = true)]
public void SaveUsers(User[] Users)
{
foreach (User CurUser in Users)
{
CurUser.Save();
}
}
根据要求,服务标题:
[ScriptService]
public class FormFields : System.Web.Services.WebService
{
JSON(简化版) - 评论显示了不存在的内容:
{
"d": [
{
"__type": "Tools.User.AccountingUser", /* This is missing */
"UserID": 3934,
"HasQBAccess": true
},
{
"__type": "Tools.User.PowerUser",
"UserID": 3937,
"AccessDB": true,
"AccessFTP": true
}
]
}
答案 0 :(得分:1)
为了获得某种有效的答案,即使它不是一个好的答案。
到目前为止,我能找到的最佳答案是在我的webservice中添加一个非常长的难看的函数定义。我永远不必打电话给它,只是让它坐在那里让C#识别出类型:
[WebMethod(EnableSession = true)]
public void ThisMethodSucks(AccountingUser u1, PowerUser u2, AdminUser u3, DatabaseUser u4, ADAdministratorUser u5, PSUser u6, NUTUser u7, TechUser u8, ...[all classes here])
{
//this method never needs to get called, just sits here.
}