加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

从Angularjs服务调用WebApi中的延迟加载的nHibernate对象时出现J

发布时间:2020-12-17 17:55:50 所属栏目:安全 来源:网络整理
导读:我从 Angularjs服务调用WebApi控制器Get方法. 角度服务: app.service('MyService',['$http',function ($http) { var getMyObjects = function () { var myObjects; var promise = $http.get('/api/objects/').success(function (data) { myObjects = data;
我从 Angularjs服务调用WebApi控制器Get方法.

角度服务:

app.service('MyService',['$http',function ($http) {

    var getMyObjects = function () {
        var myObjects;
        var promise = $http.get('/api/objects/').success(function (data) {
            myObjects = data;
         }).error(function (data,status,headers,config) {

         });

         return promise;
    };

    return {
        myObjects: myObjects
    };
}]);

WebApi Get方法:

public class ObjectsController : ApiController
{
    public IEnumerable<MyObject> Get()
    {
        return _objectRepository.GetAll().ToArray();
    }
}

我在客户端上收到500服务器错误,其内部异常是:

ExceptionMessage: "Error getting value from 'IdentityEqualityComparer' on 
'NHibernate.Proxy.DefaultLazyInitializer'."
ExceptionType: "Newtonsoft.Json.JsonSerializationException"

我该怎么做才能解决这个问题?

编辑:
我按照this answer将以下一个内容添加到WebApiConfig.cs解决了上述异常:

((DefaultContractResolver)config.Formatters.JsonFormatter.SerializerSettings.
                           ContractResolver).IgnoreSerializableAttribute = true;

现在我有这个例外:

ExceptionMessage: "Error getting value from 'DefaultValue'
on 'NHibernate.Type.DateTimeOffsetType'."
ExceptionType: "Newtonsoft.Json.JsonSerializationException"

关于是否有类似的东西的任何想法我可以做到解决这个问题?

解决方法

基于 this answer和 this answer,我通过添加以下类修复了该问题

public class NHibernateContractResolver : DefaultContractResolver
{
   protected override JsonContract CreateContract(Type objectType) 
   {
      if (typeof(NHibernate.Proxy.INHibernateProxy).IsAssignableFrom(objectType))
          return base.CreateContract(objectType.BaseType);

        return base.CreateContract(objectType);
    }
}

然后将其设置为Global.asax.cs中Application_Start中的合约解析程序:

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings
                            .ContractResolver = new NHibernateContractResolver();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读