ASMX WebService/序列化:如何强制__type"属性要包含在javascript中
本文关键字:属性 包含 javascript quot type 序列化 WebService ASMX 何强制 | 更新日期: 2023-09-27 17:52:58
我正在使用asmx webservices,并通过它们序列化/反序列化大量数据,用于我正在研究的JSON管理面板。
当信息被加载时,我调用一个webservice来加载一个User[]数组到javascript中。但是,我有大约25个User的子类,它们有自己独特的属性,实际上是通过这个webservice调用加载的。这样加载它们似乎可以很好地工作,但是保存有一些问题。
保存方法接受一个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
}
]
}
为了得到某种有效的答案,即使它不是一个好答案。
到目前为止,我能找到的最好的答案是在我的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.
}