如何从javascript访问DotnetNuke.Entities.Users

本文关键字:DotnetNuke Entities Users 访问 javascript | 更新日期: 2023-09-27 18:27:54

我想从Dotnetnuke收集userInfo到我的javascript网页。为了收集它,我使用$.getJSON:

$.getJSON("/DesktopModules/myModule/API/Service/GetUsers", "portalId=2",
    function (allData) {
        var mappedUsers = $.map(allData, function (item) {
            return new myModule.User(item);
        });
        self.Users(mappedUsers);
    });

我有这个服务控制器:

public class ServiceController : DnnApiController
{
    [AllowAnonymous]
    [HttpGet]
    public HttpResponseMessage GetUsers(int portalId)
    {
        myController controller = new myController();
        ArrayList items = controller.GetUsers(portalId);
        return Request.CreateResponse(HttpStatusCode.OK, items);
    }
}
public class myController // : ISearchable, IPortable
{
    public ArrayList GetUsers(int portalId)
    { 
        return UserController.GetUsers(portalId);
    }
}

根据DNN API文件,该方法定义为:

public static ArrayList GetUsers(
     int portalId
)

但是,当我在浏览器中测试我的服务时,它会失败并出现错误:"键入数据协定名称为"UserInfo:http://schemas.datacontract.org/2004/07/DotNetNuke.Entities.Users不应为"。考虑使用DataContractResolver或将任何未知类型静态添加到已知类型列表中,例如,使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表。"

有什么办法解决这个问题吗?

如何从javascript访问DotnetNuke.Entities.Users

问题是,如果不设置自定义序列化,就无法序列化UserInfo。UserInfo对象无法自动序列化为JSON。

最简单的解决方案是创建自己的对象来表示响应中的UserInfo——要么是一个精简类,要么只是您需要的单个属性。