ASMX WebService/序列化:如何强制__type"属性要包含在javascript中

ASMX WebService/Serialization: How to force " __type" property to be included in javascript

本文关键字:属性 包含 javascript quot type 序列化 WebService ASMX 何强制      更新时间:2023-09-26

我正在使用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.
}