【发布时间】:2011-04-26 19:51:50
【问题描述】:
我正在使用 asmx webservices 并通过它们为我正在处理的 JSON 管理面板序列化/反序列化大量数据。
加载信息时,我调用一个将 User[] 数组加载到 javascript 中的 web 服务。但是,我有大约 25 个 User 子类,它们具有自己独特的属性,这些属性实际上是由这个 web 服务调用加载的。以这种方式加载它们似乎工作正常,但保存有一些问题。
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
}
]
}
【问题讨论】:
-
请显示 Web Service 类的开头。您发布的代码甚至不会返回 JSON - 只有 XML。
-
将服务的开头附加到问题中。我曾经有一个 [ScriptMethod(ResponseFormat=ResponseFormat.Json)] 属性将其设为 JSON,但将其更改为默认 xml,希望它可以解决我的问题......它没有。但是,它的 JSON 或 XML 是否被序列化/反序列化对我来说真的没关系。
-
@ChrisG:XML 不会使用
__type。它可能使用xsi:type。 -
是的,但是当它点击 javascript 时,它仍然具有 __type 作为属性,无论是 xml 还是 json。似乎.net 知道如何处理它。我的问题实际上是首先将 __type 放入 js 对象中
-
@ChrisG:请发布错误输出的示例并展示您希望它的样子。
标签: c# javascript web-services json asmx